【发布时间】:2018-09-20 03:56:06
【问题描述】:
使用 JavaScript,我需要一个匹配任何字符串中任何 @{this-format} 实例的正则表达式。我原来的正则表达式如下:
@{[a-z-]*}
但是,我还需要一种“逃避”这些实例的方法。我想要这样,如果你添加一个额外的@,匹配就会被转义,比如@@{this}。
我最初使用了否定的lookbehind:
(?<!@)@{[a-z-]*}
这会很好用,除了...lookbehinds 是 ECMAScript2018 的一项功能,仅受 Chrome 支持。
我读到一些人建议使用否定字符集。所以我的小正则表达式变成了这样:
(?:^|[^@])@{[a-z-]*}
...本来也可以,但如果将其中两个放在一起就行不通了:@{foo}@{bar}
那么,有谁知道我怎样才能做到这一点?请记住,需要满足这些条件:
- 在字符串中的任意位置查找@{this}
- 能够像@@{this}一样逃跑
- 能够将多个相邻,如@{these}@{two}
- 不得使用 Lookbehinds
【问题讨论】:
-
澄清一下...它不适用于
@{foo}@{bar}的输入,因为它只能找到一个匹配项,而不是2 个匹配项(一个用于@{foo},一个用于@{bar}) ?
标签: javascript regex regex-lookarounds