[英]regex to change certain words in a string
我正在設法使我對正則表達式有所了解。 我以為以下方法會起作用,但不幸的是,它不會起作用。
我想做的事:
給定一個字符串str
(見下文),我想更換,是不是任何字shade
或gravel
字gravel
。
str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');
gravel shade gravel gravel gravel gravel shade
output
應等於gravel shade gravel gravel gravel gravel shade
。 我所擁有的足夠接近,但有點偏離。
您的([^gravel|^shade])
匹配非g
, r
, a
, v
, e
, l
, |
任意一個字符並將其捕獲到組1中|
, ^
,然后全部用gravel
代替。
您可以使用
/\b(?!(?:shade|gravel)\b)\w+\b/g
模式說明:
\\b
前導詞邊界 (?!(?:shade|gravel)\\b)
-否定的超前行為,將排除匹配整個單詞的shade
和gravel
\\w+
-1個以上的文字字符(屬於[A-Za-z0-9_]
設置) \\b
尾部單詞邊界。 var str = 'gravel shade water grass people water shade'; var result = str.replace(/\\b(?!(?:shade|gravel)\\b)\\w+\\b/g, 'gravel'); document.body.innerHTML = result;
這是使用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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.