2013-10-04 87 views
2

我試圖拆分字符串name\|dial_num|032\|0095\\|\\0099|\9925的分隔符|但它會跳過\|。 我在這個鏈接中找到了解決方案:Javascript regexp that matches '.' not preceded by '\' (lookbehind alternative),但它也跳過了\\|匹配'|'的Javascript正則表達式('lookbehind替代方案)

正確的結果必須是:[name\|dial_num,032\|0095\\,\\0099,\9925]

的規則的情況下,\\\|\\\\\|或等|仍然是有效的分隔符,但萬一\\\\|甚至更​​多,事實並非如此。

任何幫助將不勝感激。

回答

1

通常的解決方法是使用match,而不是split

> s = "name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925" 
"name\|dial_num|032\|0095\\|\\0099|\9925" 
> s.match(/(\\.|[^|])+/g) 
["name\|dial_num", "032\|0095\\", "\\0099", "\9925"] 

作爲一個側面說明,即使JS做支持lookbehinds,它不會是一個解決方案,因爲(?<!\\)|也錯誤地將跳過\\|

+0

完美地工作!謝謝! –

0

我挑戰自己使用替換字符串的方法..

我使用regex101.com(對於PCRE,JavaScript和Python的正則表達式引擎一個流行的在線測試儀)正確的結果

// input : name\|dial_num|032\|0095\\|\\0099|\9925 
// regex : ([^\\|](?:\\\\)*)\|      with global flag 
// replacement : $1, 
// output: name\|dial_num,032\|0095\\,\\0099,\9925 <= seams okey right !? 

測試..

var str = 'name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925'; 
str = str.replace(/([^\\|](?:\\\\)*)\|/g,'$1,'); 
console.log(str); 
// > name\|dial_num,032\|0095\\,\\0099,\9925