你好我需要只替换单个子串的出现 例如:
一些句子 #x; #x; #x ; #x; #x; 一些 #x; 字词 #x; 需要更换。
只需要通过 #y; 替换单个 #x; 并获取以下字符串
一些句子 #x; #x; #x; 与 #x; #x; 一些 #y; 字 #y; 需要更换。
注意:我的字符串将包含unicode字符,而operator \ b不起作用。
答案 0 :(得分:2)
仅匹配#x;
单个出现的最简单正则表达式是使用lookbehind和lookahead断言。
/(?<!#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."
答案 1 :(得分:2)
你可以匹配#x;重复任意次数,只替换出现一次的次数:
sentence = sentence.replace(/((?:#x;)+)/g, function(m) {
return m.length == 3 ? '#y;' : m;
});
答案 2 :(得分:1)
单个#x;
可以通过前后的空格来获得资格。
在这种情况下,您可以使用:
str.replace( /(\s+)#x;(\s+)/g, '$1#y;$2' )
答案 3 :(得分:0)
使用str.replace('/(#x;)+/g','#y;')