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.

上工作