RegExp 回溯断言替代方案
RegExp lookbehind assertion alternative
给定下面的字符串,您如何在不使用回顾断言的情况下将其拆分为仅包含双引号字符串(忽略嵌套的引号字符串)的数组?
源字符串:1|2|3|"A"|"B|C"|"\"D\"|\"E\""
目标数组:
[
'"A"',
'"B|C"',
'"\"D\"|\"E\""'
]
基本上,我正在尝试寻找 /(?<!\)".*?(?<!\)"/g
的替代方案,因为 Firefox 目前不支持后视。该解决方案不一定非要使用正则表达式,但它应该相当高效。
只需找到所有引用的文本/"[^"\]*(?:\[\S\s][^"\]*)*"/g
不需要为此拆分。
https://regex101.com/r/r5SJsR/1
格式化
"
[^"\]* # Double quoted text
(?: \ [\S\s] [^"\]* )*
"
简单的正则表达式如何 /"[^\"]+"|"\S*"/g
。
- 前两组(
"A"'
和 "B|C"
)包含在 "[^\"]+"
中 - 任何不是反斜杠或包含在一组引号内的引号的内容
- 管道 (
|
) 分隔两个条件
- 第三组 (
"\"D\"|\"E\""
) 仅由 "\S*"
覆盖 - 任何包含在一组引号内的非空格
这 returns 与您最初的正则表达式的结果相同,没有后视,可以看到在 Regex101 here.
上工作
给定下面的字符串,您如何在不使用回顾断言的情况下将其拆分为仅包含双引号字符串(忽略嵌套的引号字符串)的数组?
源字符串:1|2|3|"A"|"B|C"|"\"D\"|\"E\""
目标数组:
[
'"A"',
'"B|C"',
'"\"D\"|\"E\""'
]
基本上,我正在尝试寻找 /(?<!\)".*?(?<!\)"/g
的替代方案,因为 Firefox 目前不支持后视。该解决方案不一定非要使用正则表达式,但它应该相当高效。
只需找到所有引用的文本/"[^"\]*(?:\[\S\s][^"\]*)*"/g
不需要为此拆分。
https://regex101.com/r/r5SJsR/1
格式化
"
[^"\]* # Double quoted text
(?: \ [\S\s] [^"\]* )*
"
简单的正则表达式如何 /"[^\"]+"|"\S*"/g
。
- 前两组(
"A"'
和"B|C"
)包含在"[^\"]+"
中 - 任何不是反斜杠或包含在一组引号内的引号的内容 - 管道 (
|
) 分隔两个条件 - 第三组 (
"\"D\"|\"E\""
) 仅由"\S*"
覆盖 - 任何包含在一组引号内的非空格
这 returns 与您最初的正则表达式的结果相同,没有后视,可以看到在 Regex101 here.
上工作