我一直在想出一個正則表達式,它將替換可能包含或不包含重音字符的單詞。過去幾天我一直在研究這個問題,但找不到我需要的信息來解決我的問題。Javascript正則表達式替換可能包含重音字符的單詞
我想出了一個簡單的正則表達式來處理的話沒有大的重音字符:
var re = new RegExp('(?:\\b)hello(?:\\b)', 'gm');
var string = 'hello hello hello world hellos hello';
string.replace(re, "FOO");
結果:FOO FOO FOO world hellos FOO
上述工作,因爲我想。上述代碼的問題是當單詞包含重音字符作爲字符串中的第一個或最後一個字符時。例如:
var re = new RegExp('(?:\\b)helló(?:\\b)', 'gm');
var string = 'helló helló helló world hellós helló';
string.replace(re, "FOO");
結果:helló helló helló world FOOs helló
期望的結果:FOO FOO FOO world hellós FOO
從我的理解,上面的發生,因爲重音字符被解釋爲一個邊界。我在解決問題的嘗試(注:範圍[A-zÀ-ÿ]
是什麼,我認爲有效的字母來構建一個詞):
var re = new RegExp('([^A-zÀ-ÿ]|^)helló([^A-zÀ-ÿ]|$)', 'gm');
var string = 'helló helló helló world hellós helló';
string.replace(re, "$1FOO$2");
結果:FOO helló FOO world hellós FOO
正如你所看到的,我更接近期望的結果。但是,問題在連續出現三次或更多次時出現。請注意第二次出現helló
被忽略。我相信這是因爲它之前的空白已經與helló
的第一次匹配。
有沒有人有關於如何實現FOO FOO FOO world hellós FOO
的建議?
很可能是http://stackoverflow.com/questions/5436824/matching-accented-characters-with-javascript-regexes的副本,但我沒有使用哈默直到確認 – mplungjan
您能否準確解釋需求是什麼匹配這個詞?它是否替換爲字符串內或特定位置的任何實例?所以,而不是那個正則表達式爲什麼不''helló\ B'? – 10100111001