你好,我需要更換子 例的單隻發生:正則表達式:僅匹配單個子發生
一些句子#X,#X,#X;與#x; #x;一些#x; words #x;需要更換。
需要更換隻有一個#x; by #y;並獲得以下字符串
一些句子#X,#X,#X;與#x; #x;一些#y;單詞#y;需要更換。
一些注意事項:我的字符串將包含unicode字符並且operator \ b不起作用。
你好,我需要更換子 例的單隻發生:正則表達式:僅匹配單個子發生
一些句子#X,#X,#X;與#x; #x;一些#x; words #x;需要更換。
需要更換隻有一個#x; by #y;並獲得以下字符串
一些句子#X,#X,#X;與#x; #x;一些#y;單詞#y;需要更換。
一些注意事項:我的字符串將包含unicode字符並且operator \ b不起作用。
可以匹配#X;重複任意次數,並在那裏發生一次只能更換那些:
sentence = sentence.replace(/((?:#x;)+)/g, function(m) {
return m.length == 3 ? '#y;' : m;
});
+1:我認爲這比後臺解決方法更好。這當然更容易閱讀。 – 2011-03-10 09:47:24
謝謝你們的答案。這真的很有幫助。 – Ilya 2011-03-11 10:05:19
最簡單的正則表達式匹配的#x;
單隻出現次數將使用回顧後和前向斷言。
/(?<!#x;)#x;(?!#x;)/
但JavaScript不支持lookbehinds所以你可以只使用向前看符號,而不是嘗試以下解決方法:
/(^[\S\s]{0,2}|(?!#x;)[\S\s]{3})#x;(?!#x;)/
完整的示例:
> s = 'Some sentence #x;#x;#x; with #x;#x; some #x; words #x; need in replacing.'
> s = s.replace(/(^[\S\s]{0,2}|(?!#x;)[\S\s]{3})#x;(?!#x;)/g, '$1#y;')
"Some sentence #x;#x;#x; with #x;#x; some #y; words #y; need in replacing."
使用str.replace('/(#x;)+/g','#y;')
我認爲你的意思是'/(#x;){1}/g'而不是''/#x; {1} /'',但是{1}'仍然不能替代每個它自己的發生。 – Guffa 2011-03-10 09:53:40
@Guffa是的,我的意思是,感謝糾正我:) – diEcho 2011-03-10 09:56:00
你仍然有它的撇號,所以它不是一個正則表達式,而是一個字符串。它會在字符串中尋找文本'/(#x;)+/g',而不是'#x;'。從'{1}'到'+'的變化意味着它將用'#y;'代替'#y; #y; #y;'代替'#x; #x; #x;',但它將不僅取代單一的發生。 – Guffa 2011-03-10 13:09:35
單個#x;
可以通過之前和之後具有空格出線。 在這種情況下,您可以使用此:
str.replace(/(\s+)#x;(\s+)/g, '$1#y;$2')
謝謝你的回答,但句子可以沒有任何空格。 – Ilya 2011-03-11 09:19:14
請顯示您正在嘗試使用的代碼。 – HBP 2011-03-10 09:34:08