javascript相当于python regex的yes模式no模式



在python中有一个语法-如果存在捕获组,则x else y例如

>>> pat = re.compile('(?:(a)|(c))b(?(1)a|c)') # should only match 'aba' or 'cbc'
>>> pat.match('abc')
None
>>> pat.match('aba')
<re.Match object; span=(0, 3), match='aba'>
>>> pat.match('cba')
None
>>> pat.match('cbc')
<re.Match object; span=(0, 3), match='cbc'>

如何在javascript中实现类似的表达式。

导致了将python正则表达式语法转换为javascript 的通用方法

(?(id/name)yes-pattern|no-pattern)

我尝试了一些想法,但没有找到一种有效的方法

对于这种特殊情况,您不需要if/else语法,您可以反向引用单个捕获组:

const pattern = /([ac])b1/;
console.log(
pattern.test('abc'),
pattern.test('aba'),
pattern.test('cbc'),
);

我不确定Javascript是否像python那样有条件语句,但我认为应该这样做:

/(.+(?<=^(a|c))b(a|c))$/g

前面的.+用于实际累积令牌,然后条件被替换为正向后看(?<=...(,但我们不包括引用,而是包括我们正在寻找的实际模式。

最新更新