如何替换不在引号中的字符串
Posted
技术标签:
【中文标题】如何替换不在引号中的字符串【英文标题】:How to replace a string which is not in quotes 【发布时间】:2015-05-24 03:01:38 【问题描述】:我在以下情况下苦苦挣扎,我有一个多行字符串,里面有多个单词 test,字符串是:
Hello my name is "test" im a test
test is testing
我需要替换所有不在引号中的测试字符串 每个找到的字符串后面应该至少有 1 个空格或一个换行符,而不是其他任何东西,所以上面的字符串将转换为:
Hello my name is "test" im a HELLOWORLD
HELLOWORLD is testing
test -string 也可以在前面加上空格,但也不能没有。
我已经发现了一种只替换不在引号内的字符串的方法:
str.replace(/(test)(?=(?:[^"]|"[^"]*")*$)/, 'HELLOWORLD')
有人能帮我找出其他规则吗?
【问题讨论】:
我也想包含单引号,所以“test”和“test”都不会被替换 见***.com/questions/15741243/… 【参考方案1】:(\btest\b)(?=(?:[^"]|"[^"]*")*$)
试试这个。查看演示。
https://regex101.com/r/pT4tM5/28
【讨论】:
这个也替换了单引号内的 test -strings【参考方案2】:你可以使用:
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
【讨论】:
无法按预期工作,因为“另一个”将被替换为 HELLOWORLD 这不正确,您是否尝试过给出的答案代码。如您所见,'test'
在上面保持不变。
对不起,你是对的,它有效。我只是复制了正则表达式模式并在我的代码广告中替换了它,但它不起作用。以上是关于如何替换不在引号中的字符串的主要内容,如果未能解决你的问题,请参考以下文章