regex 如何匹配未加引号的内容?[关闭]

i5desfxk  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(151)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

昨天关门了。
这篇文章是昨天编辑并提交审查的。
Improve this question
我知道这将得到否决,并被称为重复,但我真的找不到任何工作,所以如果有人已经回答了这个问题,只是评论一个链接,并试图帮助。如果这是一个糟糕的问题,请告诉我,也许编辑我的问题,而不是向下投票,这是没有帮助的。
不管怎样,假设我在试着匹配“测试”这个词。我需要所有没有引号的“test”的出现,也许我们可以更进一步,不计算转义引号,尽管我想我可能有解决方案((?=({2})*)”)。
作为一个例子,我将用大写字母写我想要匹配的内容:TEST "testing" TESTing "this is a test" this is a TEST, i am TESTing "test123"
我想我知道另一种方法来做到这一点,但它真的很混乱,不能只用正则表达式。(这将匹配你想要匹配的所有内容和引号中的所有内容,但它不能重叠,所以你可以过滤掉引号中的内容,但这是一个非常糟糕的解决方案,不可靠,不能很好地重用)。我试过这个(?<!”).+?(?!”)但这显然不起作用,我认为我的主要问题是我对lookarounds的误解,我也尝试过研究,但没有任何帮助。我发现了一些事情,几乎是正确的方向,但结果是死胡同,我已经花了很多时间,所以也许有人碰巧知道解决方案。请不要责备我,我是新来的。
答:显然这个问题太宽泛了。有什么可以说得更具体的?有人编辑这个或者告诉我,我受够了被告知它不好,要么没有反馈,要么只是一个完全无效的论点。如果我问了最完美的问题,总有人会生气。版主会检查编辑过的问题吗?还是有机器人之类的东西?因为感觉像是机器人。

au9on6nz

au9on6nz1#

我认为你可以应用 lookaheadlookbehind 来识别引号。就像这样:
(?<!")TEST(?!")
regex101
JavaScript示例:

const str = 'TEST "testing" test123 TEST123 TESTing "this is a test" this is a TEST, i am TESTing "test123 TEST"';
const match = [...str.matchAll(/(?<!")TEST(?!")/g)];
match.map( el => console.log( el[0], el.index + '-' + (el.index + el[0].length) ) );

如果你必须考虑转义字符,像这样:
(?<!"|(?<!\\)")TEST(?!"|(?!\\)")
regex101

nbewdwxp

nbewdwxp2#

假设引号是平衡的,诀窍是当目标后面有 * 偶数 * 个引号时进行匹配:

(?i)test(?=(([^"]*"){2})*[^"]*$)

参见live demo

相关问题