如何使用Javascript RegExp匹配和替换包含子字符串的整个单词

时间:2017-01-08 02:13:01

标签: javascript regex

我想使用Javascript匹配并替换包含子字符串的整个单词。

到目前为止,这是我的代码:

var final = ""
var n, a = [], walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
const searchWordPattern = new RegExp(searchWord, 'i');

while(n = walk.nextNode()) {
  a.push(n);
  n.nodeValue = n.nodeValue.replace(searchWordPattern, "--");
  final = final.concat(n.nodeValue);
}

这部分有效。它找到我正在搜索的单词并将其删除。但如果搜索词以任何方式共轭,那就会被遗忘。我希望正则表达式匹配找到子字符串的整个单词。并删除它。我需要改变什么?

修改

我尝试使用以下答案,但对于\ w或\ S变体似乎没有任何不同。这是我正在使用的代码:

var final = ""
var n, a = [], walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
const searchWordPattern = new RegExp('\S*' + searchWord + '\S*', 'i');

while(n = walk.nextNode()) {
  a.push(n);
  n.nodeValue = n.nodeValue.replace(searchWordPattern, "--");
  final = final.concat(n.nodeValue);
}

结果是searchWord被“ - ”字符串替换,但如果它是共轭的,则不包括其他字符。因此,如果“look”是searchWord,则正则表达式的结果是“--ing”。我希望它只是“ - ”。

1 个答案:

答案 0 :(得分:3)

您需要调整正则表达式,以便不只是搜索单词:

new RegExp(searchWord, 'i');

您还可以搜索周围的任何字词"字符:

new RegExp('\\w*' + searchWord + '\\w*', 'i');

或所有非空白字符:

new RegExp('\\S*' + searchWord + '\\S*', 'i');