当前位置: 首页 > 面试题库 >

正则表达式以匹配所有不在引号内的实例

夏宪
2023-03-14
问题内容

从这个问题,我推断出不可能匹配给定正则表达式的所有实例而不是引号。也就是说,它不能匹配转义的引号(例如:)"this whole \"match\" should betaken"。如果有我不知道的方法可以解决我的问题。

但是,如果没有,我想知道在JavaScript中是否可以使用任何有效的替代方法。我已经考虑了一下,但是无法提供任何适用于大多数(即使不是全部)情况的优雅解决方案。

具体来说,我只需要使用.split()和.replace()方法的替代方法,但是如果可以更广泛地推广,那将是最好的选择。

例如:
输入字符串:
+bar+baz"not+or\"+or+\"this+"foo+bar+
用#代替+,而不用引号引起来,将返回:
#bar#baz"not+or\"+or+\"this+"foo#bar#


问题答案:

实际上,您可以匹配一个正则表达式的所有实例,而不是将它们匹配在任何字符串的引号内,因为每个字符串都被再次关闭。像上面的示例一样,您要匹配\+

此处的主要观察结果是,如果单词后面有偶数个引号,则该单词在引号之外。可以将其建模为先行断言:

\+(?=([^"]*"[^"]*")*[^"]*$)

现在,您不想计算转义引号。这变得更加复杂。[^"]*您需要同时考虑反斜杠并使用,而不是将其引至下一个引号[^"\\]*。到达反斜杠或引号后,如果遇到反斜杠,则需要忽略下一个字符,否则前进到下一个未转义的引号。看起来像(\\.|"([^"\\]*\\.)*[^"\\]*")。结合起来,您到达

\+(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)


 类似资料:
  • 我试图匹配所有包含引号的句子,独立于引号的长度或引号内的句子数量。 正如Alfe所指出的,得到一个完美的正则表达式可能是不可行的,但是如果可能的话,我想改进我正在使用的正则表达式。 现在我这样做是为了找到报价: 但是我想确保引用出现在一个句子中,然后捕捉整个句子。 我所说的一句话是指一段文字: 通常前面有空格 正如阿尔夫指出的那样,这并不能涵盖所有的句子,但如果我能满足这些条件,那就足够了。 例如

  • 问题内容: 我想构建一个简单的正则表达式,以涵盖带引号的字符串,包括其中的所有转义引号。例如, 显然,类似 不起作用,因为它与第一个转义的引号匹配。 什么是正确的版本? 我想对于其他转义字符,答案是相同的(只需替换相应的字符)。 顺便说一句,我知道“包罗万象”的正则表达式 但我会尽量避免使用它,因为毫不奇怪,它的运行速度要比更具体的设备慢。 问题答案: 所有其他答案的问题是,它们只适合最初的明显测

  • 我面临一个挑战,要以以下格式匹配输入: 输入由key=value对组成。关键字以斜杠开头。值可以是数字或引号中的字符串。 该值可以选择性地包含转义引号,即引号后面跟着引号(“”)。这种转义引号应该被视为价值的一部分。不需要检查转义引号是否平衡(例如,由另一个转义引号结束)。 正则表达式应该匹配序列中给定的key=value部分,并且对于长输入(例如value是10000个字符)不应该中断。

  • 我正在尝试匹配以下正则表达式: 换句话说,一个单词边界后跟上面的任何字符串(可选地跟一个句点字符),后面跟一个单词边界。 我也在regex101上尝试过这一操作,但与数仍然不匹配:https://regex101.com/r/klkmwl/1 转义符并没有什么区别,我已经尝试使用十六进制转义序列来代替和符(如本问题所建议的)。为什么这不匹配?

  • 问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-

  • 问题内容: 我正在解析的字符串中可能包含任意数量的带引号的字符串(我在解析代码,并尝试避免使用PLY)。我想找出是否有子字符串被引用,并且我有子字符串索引。我最初的想法是使用re查找所有匹配项,然后找出它们代表的索引范围。 似乎我应该将re与类似的正则表达式一起使用(目前,我避免使用三引号和此类字符串)。当我使用findall()时,会得到一个匹配字符串的列表,虽然有些不错,但我需要索引。 我的子