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

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' 在上面保持不变。 对不起,你是对的,它有效。我只是复制了正则表达式模式并在我的代码广告中替换了它,但它不起作用。

以上是关于如何替换不在引号中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中用\替换字符串中的“(双引号)”

oracle 中如何将字符串中的英文单引号替换为右斜杠+英文单引号

如何将带引号的多字字符串替换为参数?

VBA - 替换CSV中的逗号不在引号内

用 C# 替换完整 sql 查询中的单引号

Python替换引号内的',',但保留其他逗号,然后删除字符串中的引号