RegEx:仅匹配单个子字符串出现

时间:2011-03-10 09:31:17

标签: javascript regex string

你好我需要只替换单个子串的出现 例如:

  

一些句子 #x; #x; #x ; #x; #x; 一些 #x; 字词 #x; 需要更换。

只需要通过 #y; 替换单个 #x; 并获取以下字符串

  

一些句子 #x; #x; #x; #x; #x; 一些 #y; #y; 需要更换。

注意:我的字符串将包含unicode字符,而operator \ b不起作用。

4 个答案:

答案 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;')