2012-11-29 45 views
15

可能重複使用變音符號的問題:
Javascript RegExp + Word boundaries + unicode characters正則表達式字邊界 b具有在(德語特殊字符)

在ECMA腳本正則表達式(在這裏測試供參考:http://regexpal.com/)我得到帶有單詞邊界的誤報(使用\b)和變音符號。例如

正則表達式\bPflanzen\b

不應與 「Pflanzenöl」 但它確實。如果我將ö更改爲oe一切正常。正則表達式似乎不認爲變音詞是詞彙的一部分,儘管它們有很多語言。

什麼是最好的解決方法?

+2

...最好的解決方法是使用XRegExp,因爲[此答案](http://stackoverflow.com/a/10591266/20938)建議。 –

回答

11

正則表達式引擎對速記字符類如何工作有不同的想法。 \b\w緊密聯繫在幾乎所有的正則表達式任務中幾乎沒有用處,但很遺憾證明在許多情況下「足夠好」以證明它的繼續存在。

在這種情況下,JavaScript的只考慮ASCII [a-zA-Z0-9_]\w,自\b與從\w一個字符,東西是不是你會得到觀察到的行爲之間的位置。

通常的解決方法是使用環視,而不是\b

(?<![a-zA-ZäöüßÄÖÜ])Pflanzen((?![a-zA-ZäöüßÄÖÜ])) 

然而,JavaScript還有不支持回顧後,所以我們需要做點別的:

(^|[^a-zA-ZäöüßÄÖÜ])Pflanzen(?![a-zA-ZäöüßÄÖÜ]) 

這將匹配要麼是字符串的開始,要麼是不是來自該類的字符。無論如何,這很麻煩。時間到了,JavaScript得到了正確的正則表達式支持,包括Unicode和lookaround。

+0

加入[ECMAScript社區](http://www.ecmascript.org/community.php),並說出爲什麼它應該在ECMAScript ed 6,Harmony,ES Next中,無論如何。 – RobG

+0

我認爲「爲什麼」是相當明顯的,因爲越來越多的軟件(也需要處理不同的語言)被寫入JS中。這些天缺乏適當的Unicode支持是語​​言或其標準庫的嚴重和可怕的遺漏。無論如何,我不是規範或標準作者。我什至不知道JavaScript的線索;我會是錯誤的人蔘與。 – Joey