正则表达式更改字符串中的某些单词

时间:2016-05-03 20:34:16

标签: javascript regex

我试图了解正则表达式。我认为以下内容可行,但遗憾的是它不是。

我想做什么:

给定一个字符串str(见下文)我想用shade替换任何不是gravelgravel的单词。

str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');  

output应该等于gravel shade gravel gravel gravel gravel shade。我所拥有的是足够接近但有点偏离。

2 个答案:

答案 0 :(得分:2)

您的([^gravel|^shade])匹配并在第1组中捕获任何不是grav,{{1}的单个字符},el|,并将所有内容替换为^

您可以使用

gravel

请参阅regex demo

模式描述:

  • /\b(?!(?:shade|gravel)\b)\w+\b/g - 领先的字边界
  • \b - 一个消极的预测,将排除匹配的整个单词(?!(?:shade|gravel)\b)shade
  • gravel - 1个单词字符(属于\w+集)
  • [A-Za-z0-9_] - 尾随字边界。

\b

答案 1 :(得分:0)

以下是使用split/joinarray.map解决问题的非正则表达式解决方案:

var str = "gravel shade water grass people water shade";
var repl = str.split(' ').map(function (w) {
           return (w!='gravel' && w!= 'shade')?'gravel':w; }).join(' ')

document.writeln("<pre>" + repl + "</pre>")
//=> "gravel shade gravel gravel gravel gravel shade"