我试图了解正则表达式。我认为以下内容可行,但遗憾的是它不是。
我想做什么:
给定一个字符串str
(见下文)我想用shade
替换任何不是gravel
或gravel
的单词。
str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');
output
应该等于gravel shade gravel gravel gravel gravel shade
。我所拥有的是足够接近但有点偏离。
答案 0 :(得分:2)
您的([^gravel|^shade])
匹配并在第1组中捕获任何不是g
,r
,a
,v
,{{1}的单个字符},e
,l
,|
,并将所有内容替换为^
。
您可以使用
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/join
和array.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"