正面回顾和 Safari 解决方法

Positive lookbehind and Safari workaround

所以我有一个这样的行文件....

valueA +920.32 % valueA +479.89%
valueB +886.82 % valueB +424.59%
--- insert more similar lines ---

我使用以下正则表达式仅获取两个百分比并将它们存储在数组中

myObject.valueA = text.match(/(?<=valueA)(?:.+?(?=%))/g);

结果如我所愿

valueA: Array [ " +920.32 ", " +479.89" ]

我对此非常满意,并继续推进我的小项目,直到我试图与我的朋友在 iPhone 上测试它,但没有任何反应。我发现这是由于 safari 不支持积极的背后观察,所以我一直在寻找可以产生类似结果的东西。

以积极的眼光看,我接近了,但结果中包含 'valueA ',我真的不想用额外的代码行删除它。

(?=valueA)(?:.+?(?=%))

结果

valueA: Array [ "valueA +920.32 ", "valueA +479.89" ]

我确信有一种简单的方法可以做到这一点,但我一直在 RegExr 上闲逛,但没有成功。提前谢谢你。

如果数据确实如此,为什么不只捕获 +、. 和数字? ([\+\d\.]+)

const text = `valueA +920.32 % valueA +479.89%`;

console.log(text.match(/([\+\d\.]+)/g))

您可以使用 matchAll method 中的捕获组来解决此问题:

const s = `valueA +920.32 % valueA +479.89%
valueB +886.82 % valueB +424.59%`

var arr = [...s.matchAll(/\bvalueA\s+([^\s%]+)/g)]

arr.forEach(el => console.log( el[1] ))