如何在不在结果中包含分隔符的情况下匹配单词的所有匹配项

时间:2016-05-26 11:03:11

标签: javascript regex regex-lookarounds

我有一个输入字符串s="blah, blah.blah blah foöblah blah"

考虑whitespace,.作为分隔符,我希望匹配blah的所有单词出现次数,例如:用以上x替换所需的匹配后,字符串应如x, x.x x foöblah x

我试过跟随Regex /(?:\s|.|,|^)blah(?=\s|.|,|$)/g但它有以下问题

  1. blah
  2. 中的foöblah匹配
  3. 它包括与周围的分隔符匹配,这是不希望的。 我只想要等等
  4. 编辑#1 :输入字符串s可以有重音字符,因此使用字边界作为正则表达式将无效。

2 个答案:

答案 0 :(得分:1)

使用word boundary \b

  

匹配单词边界。单词边界匹配单词字符未被跟随或前面的另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。 (不要与[\ b]混淆。)

     

实施例:   / \ bm /匹配' m'在"月亮" ;   / oo \ b /与' oo'不匹配在"月亮",因为' oo'之后是' n'这是一个单词字符;   / oon \ b /匹配' oon'在"月亮",因为' oon'是字符串的结尾,因此后面没有单词字符;   / \ w \ b \ w /将永远不会匹配任何内容,因为单词字符永远不会被非单词和单词字符所遵循。( Taken from here



s = "blah, blah.blah blah fooblah blah";
console.log(
  s.replace(/\bblah\b/g, 'x')
)




<小时/> 更新:

使用您自己的正则表达式,您需要在.之前转义\.,同时使用$1替换使用字符串添加捕获的组值 的 Regex explanation here

&#13;
&#13;
s = "blah, blah.blah blah fooblah blah";
console.log(
  s.replace(/(\s|\.|,|^)blah(?=\s|\.|,|$)/g, '$1x')
)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以将/\bblah\b/替换为x

document.writeln('blah, blah.blah blah fooblah blah'.replace(/\bblah\b/g, 'x'));

\b确保开头是

修改

如果您使用

(^|[^\w\x80-\xff])blah(?![\w\x80-\xff])

并替换为

$1x

我相信你会得到你想要的东西。

document.writeln('blah, blah.blah blah! foöblah blah éblah'.replace(/(^|[^\w\x80-\xff])blah(?![\w\x80-\xff])/g, '$1x'));

它类似于Pranav的解决方案,但会处理所有标点符号,例如: blah!