我需要在字符串中匹配冒号(':'),但不能用引号括起来 - 或者是"或"字符.
所以以下应该有2场比赛
something:'firstValue':'secondValue'
something:"firstValue":'secondValue'
Run Code Online (Sandbox Code Playgroud)
但这应该只有1场比赛
something:'no:match'
Run Code Online (Sandbox Code Playgroud)
如果正则表达式实现支持环顾断言,请尝试以下操作:
:(?:(?<=["']:)|(?=["']))
Run Code Online (Sandbox Code Playgroud)
这将匹配前面或后面带有双引号或单引号的任何冒号。因此,仅考虑您提到的构造。something:firstValue将不匹配。
如果您构建一个小的解析器来逐字节读取输入并记住何时打开引用,那将更好。