javascript - 带有正则表达式积极前瞻的 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);
所以我的问题是:这真的是一个错误吗?如果是这样,是否有另一种可以解决我的问题的方法?
解决方案
我猜你可能想写一个简单的表达式,有点类似于:
\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的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。
推荐阅读
- html - 在尝试了 HTML 和正文的各种可能选项后,HTML 和正文高度未覆盖整个页面
- laravel - 如何按关系对laravel的产品进行排序?
- flutter - 为什么在分配这样的未来函数时pumpAndSettle超时
- dynamics-crm - 有什么方法可以增加子网格 Dynamics CRM 365 中的保存按钮大小
- sql - 练习sql解释
- javascript - Popover关闭时Material-UI Button无法触发
- botframework - 如何使用 Rasa 通过 botframework 输出通道主动向 Skype 用户发送消息
- html - 背景太放大了
- python - 如何仅使用一个列表或元组编写代码来解决此问题
- ssh - 使用命令字符串运行 ssh 如何在幕后工作?