如何匹配U1234,但不匹配Javascript中的\ U1234?JavaScript正則表達式匹配字符串,除非前面加反斜槓
我無法弄清楚如何不匹配單個反斜槓。 我能得到的最接近的是:
\[\\]{0}U[0-9]{4}\b
但是這並不奏效。 有什麼建議嗎?
如何匹配U1234,但不匹配Javascript中的\ U1234?JavaScript正則表達式匹配字符串,除非前面加反斜槓
我無法弄清楚如何不匹配單個反斜槓。 我能得到的最接近的是:
\[\\]{0}U[0-9]{4}\b
但是這並不奏效。 有什麼建議嗎?
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
[^\\]U[0-9]{4}
或沿着這些線。它不會匹配主題字符串開頭的序列...
逃避反斜槓字符集;它正在逃避結束括號,而不是...嘗試[^ \\\] U [0-9] {4} – 2009-09-04 21:50:34
謝謝,克里斯。編輯。 – 2009-09-04 22:13:43
不幸的是,JS似乎不支持正確的語法,即後面的斷言/(?<!\\)U[0-9]{4}/
。
所以你需要使用:
/[^\\]U[0-9]{4}/
這是正則表達式文字語法。如果你把正則表達式中的字符串,你必須再次逃脫反斜線:
"[^\\\\]U[0-9]{4}"
我會建議使用回顧後,但JavaScript doesn't seem to support it。也許你可以在U [0-9] {4}上匹配,找到匹配的位置,然後檢查左邊的字符以查看它是否是\「?
JavaScript的正則表達式不支持負向後看斷言。建議你只匹配/的想法/ [^ \] U /會匹配諸如「_U」的字符串,所以這不是答案。最好的辦法是使用兩個正則表達式,第一個查找所有出現的事件,第二個用於過濾後視圖。
"\\U0000 U0000".match(/\\?U[0-9]{4}/g)
.filter(function (match) {
return !/^\\/.test(match)
})
嗯......是\^U [0-9] {4} \ b適合你嗎?
這是我今年早些時候收到的一個提示,請使用http://www.regexpal.com/來測試你的正則表達式。即時結果可讓您花更多時間敲出正確的模式。我喜歡它 – thorncp 2009-09-04 23:32:15