用于匹配字符的正则表达式,但不是在用引号括起来时

Jac*_*ius 14 regex

我需要在字符串中匹配冒号(':'),但不能用引号括起来 - 或者是"或"字符.

所以以下应该有2场比赛

something:'firstValue':'secondValue'    
something:"firstValue":'secondValue'
Run Code Online (Sandbox Code Playgroud)

但这应该只有1场比赛

something:'no:match'
Run Code Online (Sandbox Code Playgroud)

Gum*_*mbo 5

如果正则表达式实现支持环顾断言,请尝试以下操作:

:(?:(?<=["']:)|(?=["']))
Run Code Online (Sandbox Code Playgroud)

这将匹配前面或后面带有双引号或单引号的任何冒号。因此,仅考虑您提到的构造。something:firstValue将不匹配。

如果您构建一个小的解析器来逐字节读取输入并记住何时打开引用,那将更好。

  • 我同意Gumbo-最好建立一个小解析器 (2认同)
  • [请参阅 regex101 上的正则表达式](https://regex101.com/r/bo4Es1/2)。我同意@DanielBrückner 的观点,这个正则表达式有效,但在提到的退化情况下失败了。 (2认同)