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