Javascript firefox中的负向后看
我刚刚艰难地了解到firefox不支持负面外观。刚刚投入生产,一切似乎都很好。一旦我们的firefox用户开始点击它,他们就一无所获 是否有pollyfill或此正则表达式的其他选项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
"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)据我目前所知,除了Chrome之外,其他JavaScript环境一般都不支持它们。是的,我明白了。这就是为什么我想看看是否有一个不同的方法/正则表达式可以使用。我还想使用match
比如var res=str.match(/(?:[^^^,]+\^(?),)+/g)
但是如果有()的话,你需要在开始/结束处修剪空格。@IceMetalPunk:当然,要明智地选择临时字符。Unicode中有非常好的临时字符--I likeu+FDD[123]
,在javascript\xFDD1
中,由于其他解决方案涉及一个大型正则表达式,如果出现其他问题,我真的不想对其进行故障排除。虽然有点“贫民区”,但它更具可读性和可维护性。我真的很喜欢这一个,我将保存此链接,以后我将多次使用此链接。
\s*
( # (1 start)
(?:
(?! \s* (?:,|$) )
[^,\^]
)*
(?:
\^,?
(?:
(?! \s* (?:,|$) )
[^,\^]
)*
)*
) # (1 end)
\s*
,?
\s*