RegExp后置断言替代

时间:2018-08-13 23:33:12

标签: javascript regex lookbehind

给出以下字符串,如何将其拆分为仅包含双引号字符串(忽略嵌套的带引号字符串)而不使用后置断言的数组?

源字符串:1|2|3|"A"|"B|C"|"\"D\"|\"E\""

目标数组:

[
  '"A"',
  '"B|C"',
  '"\"D\"|\"E\""'
]

基本上,我正在尝试寻找/(?<!\\)".*?(?<!\\)"/g的替代方法,因为Firefox当前不支持后向隐藏。该解决方案不必使用正则表达式,但是应该相当有效。

2 个答案:

答案 0 :(得分:0)

只需找到所有引用的文字/"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
不需要为此。

https://regex101.com/r/r5SJsR/1

格式化

 "
 [^"\\]*                       # Double quoted text
 (?: \\ [\S\s] [^"\\]* )*
 "

答案 1 :(得分:0)

简单的正则表达式/"[^\\"]+"|"\S*"/g怎么样。

  • "A"'覆盖了前两组("B|C""[^\\"]+")-任何不是反斜杠或包含在一组引号内的引号的内容
  • 管道(|)将两个条件分隔开
  • 第三组("\"D\"|\"E\"")简单地用"\S*"覆盖-包装在一组引号内的任何非空格

这将返回与您最初的正则表达式相同的结果,没有回味,可以在 Regex101 here 上看到。