首页 > 解决方案 > 带有正则表达式积极前瞻的 Firefox 错误?

问题描述

我正在尝试删除字符串中字符前面和<字符后面>的空格。所以我使用 regex101 来弄清楚如何做到这一点并想出了这两个正则表达式:

/ ?(?=<)/g
/(?<=>) /g

我知道由于 ES2018,Firefox 不支持负面的lookbehinds,但根据 regex101,这些都是正面的lookaheads。然而,当我尝试这些时,Firefox 会返回:

SyntaxError:无效的正则表达式组

不过,他们的 Chrome 工作得非常好。

工作示例(在 Chrome 和 Firefox 中运行):

let str = "this is <some> test";

let patten1 = new RegExp(' ?(?=<)','g');
let patten2 = new RegExp('(?<=>) ','g');

str = str.replace(patten1, '');
str = str.replace(patten2, '');

console.log(str);

所以我的问题是:这真的是一个错误吗?如果是这样,是否有另一种可以解决我的问题的方法?

标签: javascriptregexfirefox

解决方案


我猜你可能想写一个简单的表达式,有点类似于:

\s*(<[^>]*>)\s*
演示 1

或者

\s{0,1}(<[^>]*>)\s{0,1}
演示 2

并将其替换为$1.

const regex = /\s{0,1}(<[^>]*>)\s{0,1}/g;
const str = `this is <some> test`;
const subst = `$1`;

const result = str.replace(regex, subst);

console.log(result);


如果您想简化/修改/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。



推荐阅读