2009-09-04 70 views
2

如何匹配U1234,但不匹配Javascript中的\ U1234?JavaScript正則表達式匹配字符串,除非前面加反斜槓

我無法弄清楚如何不匹配單個反斜槓。 我能得到的最接近的是:

\[\\]{0}U[0-9]{4}\b 

但是這並不奏效。 有什麼建議嗎?

+0

這是我今年早些時候收到的一個提示,請使用http://www.regexpal.com/來測試你的正則表達式。即時結果可讓您花更多時間敲出正確的模式。我喜歡它 – thorncp 2009-09-04 23:32:15

回答

9

JavaScript絕對不支持lookbehind斷言。下一個最好的方式得到你想要的東西,在我看來,將

(?:^|[^\\])(U[0-9]{4}) 

說明:

(?:   # non-capturing group - if it matches, we don't want to keep it 
^  # either match the beginning of the string 
    |   # or 
    [^\\]  # match any character except for a backslash 
)   # end of non-capturing group 
(U\d{4})  # capturing group number 1: Match U+4 digits 
+1

+1我放了之前,所有503都在我們身上...... – bobince 2009-09-04 22:26:30

+1

+1爲解釋正則表達式 – nickf 2009-09-04 23:55:48

+1

哦,在挑剔的點上,如果你想匹配0,1,2 .. 。9然後你應該使用'[0-9]'。 '\ d'實際上比0-9多得多。有很多unicode字符是不同字符集中的數字。 – nickf 2009-09-04 23:59:32

1

[^\\]U[0-9]{4}或沿着這些線。它不會匹配主題字符串開頭的序列...

+0

逃避反斜槓字符集;它正在逃避結束括號,而不是...嘗試[^ \\\] U [0-9] {4} – 2009-09-04 21:50:34

+0

謝謝,克里斯。編輯。 – 2009-09-04 22:13:43

0

不幸的是,JS似乎不支持正確的語法,即後面的斷言/(?<!\\)U[0-9]{4}/

所以你需要使用:

/[^\\]U[0-9]{4}/ 

這是正則表達式文字語法。如果你把正則表達式中的字符串,你必須再次逃脫反斜線:

"[^\\\\]U[0-9]{4}" 
0

JavaScript的正則表達式不支持負向後看斷言。建議你只匹配/的想法/ [^ \] U /會匹配諸如「_U」的字符串,所以這不是答案。最好的辦法是使用兩個正則表達式,第一個查找所有出現的事件,第二個用於過濾後視圖。

"\\U0000 U0000".match(/\\?U[0-9]{4}/g) 
.filter(function (match) { 
    return !/^\\/.test(match) 
}) 
0

嗯......是\^U [0-9] {4} \ b適合你嗎?