如何替换不在引号中的字符串

时间:2015-03-20 16:06:20

标签: javascript regex string replace quotes

我正在努力解决以下问题,我有一个多行字符串,里面有多次单词test,字符串是:

Hello my name is "test" im a test
test is testing

我需要替换所有不在引号中的测试字符串 每个找到的应该跟着至少1个空格或换行符,而不是其他任何东西,所以上面的字符串将变成:

Hello my name is "test" im a HELLOWORLD
HELLOWORLD is testing

测试-string也可以用空格前缀,但也不能没有。

我已经发现的是一种只替换不在引号内的字符串的方法:

str.replace(/(test)(?=(?:[^"]|"[^"]*")*$)/, 'HELLOWORLD')
是不是可以帮我找到其他规则?

2 个答案:

答案 0 :(得分:3)

(\btest\b)(?=(?:[^"]|"[^"]*")*$)

试试这个。看看演示。

https://regex101.com/r/pT4tM5/28

答案 1 :(得分:1)

您可以使用:

var str = 'Hello my \'test\' name is "test" im a test\ntest is testing';
var repl = str.replace(/("[^"]*"|'[^']*')|\btest\b/g, function($0, $1) { 
           return ($1 == undefined) ? "HELLOWORLD" : $1; });

<强>输出:

Hello my 'test' name is "test" im a HELLOWORLD
HELLOWORLD is testing