首页 > 解决方案 > Firefox 中的负向 Lookbehind

问题描述

我刚刚学到了 Firefox 不支持负面后视的艰难方法。刚刚部署到生产环境,一切似乎都很好。一旦我们的 Firefox 用户开始使用它,他们什么也得不到。

这个正则表达式是否有 pollyfill 或其他替代方法?

"Item 1, Item2^, Item2a, Item3".split(/(?<!\^),/)

我正在尝试将字符串拆分为逗号上的数组,但不是^,

“项目 1、项目 2^、项目 2a、项目 3”

最终应该是

[
"Item 1",
"Item2^, Item2a",
"Item3"
]

标签: javascriptregex

解决方案


正如评论中所说,JS 不支持旧 EmcaScript 版本中的lookbehinds。
新版本(6 我认为确实支持它)。

无论如何,您可以做的是查找所有符合您需要的正则表达式。

寻找/\s*((?:(?!\s*(?:,|$))[^,\^])*(?:\^,?(?:(?!\s*(?:,|$))[^,\^])*)*)\s*,?\s*/g

每次匹配时元素都在捕获组 1 中。
请注意,此正则表达式会进行空格修剪,否则它会非常小。

可读的正则表达式

 \s* 
 (                             # (1 start)
      (?:
           (?! \s* (?:,|$) )
           [^,\^] 
      )*

      (?:
           \^,?
           (?:
                (?! \s* (?:,|$) )
                [^,\^] 
           )*
      )*
 )                             # (1 end)
 \s* 
 ,?
 \s* 

JS 演示

var arr = [];
var str = "Item 1, Item2^, Item2a, Item3  ,,, ii , kkk ";
var re = /\s*((?:(?!\s*(?:,|$))[^,\^])*(?:\^,?(?:(?!\s*(?:,|$))[^,\^])*)*)\s*,?\s*/g;

str.replace( re, function( m, grp1 ) {
     arr.push( grp1 );
    });

console.log( arr );


推荐阅读