javascript - Firefox 中的负向 Lookbehind
问题描述
我刚刚学到了 Firefox 不支持负面后视的艰难方法。刚刚部署到生产环境,一切似乎都很好。一旦我们的 Firefox 用户开始使用它,他们什么也得不到。
这个正则表达式是否有 pollyfill 或其他替代方法?
"Item 1, Item2^, Item2a, Item3".split(/(?<!\^),/)
我正在尝试将字符串拆分为逗号上的数组,但不是^,
“项目 1、项目 2^、项目 2a、项目 3”
最终应该是
[
"Item 1",
"Item2^, Item2a",
"Item3"
]
解决方案
正如评论中所说,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 );
推荐阅读
- react-native - 在 React Native 中为度量选择创建自定义选择器的最佳方法是什么?
- laravel - 数据未显示在我的控制台中。在 vue 中登录
- python - 如何计算数据框中同一列中特定值之后的行数
- mysql - MySQL根据其他列值以增量方式更新列
- rx-java - rxJava如何在能够访问先前参数的同时进行顺序调用
- kubernetes - 如何在 Kubernetes 上设置 Kafka 集群
- javascript - 需要帮助使用 javascript/json 解析 Google 地图时间线数据
- python - 向前和向后遍历字符串,提取交替字符
- python - RuntimeError:形状“[784]”对于大小为 7840 的输入无效
- javascript - 如何使用 react-spring 为 onClick 事件上的文本设置动画?