【发布时间】:2019-01-18 11:41:09
【问题描述】:
我正在尝试在 JS 中使用以下正则表达式:
(?<=@[A-Z|a-z]+,)\s|(?<=@[A-Z|a-z]+,\s[A-Z|a-z]+)\s(?=\[[A-Z|a-z]+\])
翻译成:
匹配所有以 : 开头的空格
@- 后跟
A-Z或a-z范围内的任意数量的字符 - 后跟逗号
或
匹配前面的所有空格:
@后跟
A-Z或a-z范围内的任意数量的字符- 后跟逗号
- 后跟一个空格
- 后跟
A-Z或a-z范围内的任意数量的字符
AND 成功:
[- 后跟
A-Z或a-z范围内的任意数量的字符 ]
但是,JS 不支持lookbehind。是否有任何替代方法可以在 JS 或任何我可以使用的 npm 库中支持上述正则表达式?
所以,如果我们有一个像Hi my name is @John, Doe [Example] and I am happy to be here 这样的句子应该变成Hi my name is @John,Doe[Example] and I am happy to be here。
另外,如果我们有类似Hi my name is @John, Smith Doe [Example] 之类的东西,那应该变成Hi my name is @John,SmithDoe[Example]。
【问题讨论】:
-
JavaScript 确实支持后视,从 ECMAScript 2018 开始。但几乎没有浏览器支持。
-
你想替换什么东西吗?
-
@revo 试图替换那些空格,是的
-
将您的lookbehinds转换为捕获组,并在进行替换时为它们添加反向引用以使它们出现在结果中。
-
@revo 您能否发布一个示例作为答案 - 不完全确定如何做到这一点
标签: javascript regex regex-lookarounds lookbehind