Javascript firefox中的负向后看

Javascript firefox中的负向后看,javascript,regex,Javascript,Regex,我刚刚艰难地了解到firefox不支持负面外观。刚刚投入生产,一切似乎都很好。一旦我们的firefox用户开始点击它,他们就一无所获 是否有pollyfill或此正则表达式的其他选项 "Item 1, Item2^, Item2a, Item3".split(/(?<!\^),/) 另一种选择是,总有好的“双重替代品”供您选择: r=“项目1、项目2^、项目2a、项目3” .替换(/,/g,“~”) .替换(/\^~/g,“^,”) .split(/~/g) console.log(r

我刚刚艰难地了解到firefox不支持负面外观。刚刚投入生产,一切似乎都很好。一旦我们的firefox用户开始点击它,他们就一无所获

是否有pollyfill或此正则表达式的其他选项

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

另一种选择是,总有好的“双重替代品”供您选择:

r=“项目1、项目2^、项目2a、项目3”
.替换(/,/g,“~”)
.替换(/\^~/g,“^,”)
.split(/~/g)

console.log(r)
正如评论中所说,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=“第1项、第2项、第2a项、第3项、第ii项、第kkk项”;
变量re=/\s*((?:(?!\s*(?:,|$)[^,\^])*(?:^,(?:(?!\s*(?:,|$)[^,\^])*)*)\s*,?\s*/g;
str.replace(re,功能)(m,grp1){
arr.push(grp1);
});

控制台日志(arr)match
比如
var res=str.match(/(?:[^^^,]+\^(?),)+/g)
但是如果有()的话,你需要在开始/结束处修剪空格。@IceMetalPunk:当然,要明智地选择临时字符。Unicode中有非常好的临时字符--I like
u+FDD[123]
,在javascript
\xFDD1
中,由于其他解决方案涉及一个大型正则表达式,如果出现其他问题,我真的不想对其进行故障排除。虽然有点“贫民区”,但它更具可读性和可维护性。我真的很喜欢这一个,我将保存此链接,以后我将多次使用此链接。
 \s* 
 (                             # (1 start)
      (?:
           (?! \s* (?:,|$) )
           [^,\^] 
      )*

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