在Java正则表达式中,可以在字符类中使用交集运算符&&来简洁地定义它们,例如。
&&
[a-z&&[def]] // d, e, or f [a-z&&[^bc]] // a through z, except for b and c
在JavaScript中有等价的吗?
mklgxw1f1#
在JavaScript中有等价的吗?简单的回答:不,没有。它是特定的Java语法。参见:Jan Goyvaerts和Steven Levithan的Regular Expressions Cookbook这里有一个相关部分的预览。可能不用说,但下面的JavaScript代码:
if(s.match(/^[a-z]$/) && s.match(/[^bc]/)) { ... }
与Java代码相同:
if(s.matches("[a-z&&[^bc]]")) { ... }
v64noz0r2#
正如其他人所说的,没有等价物,但是可以使用look-ahead实现&&的效果。转换为:
[classA&&classB]
变成:
(?=classA)classB
例如,在Java中:
[a-z&&[^bc]]
与下面的行为相同:
(?=[a-z])[^bc]
这在JavaScript中完全支持。我不知道这两种形式的相对性能(在像Java和Ruby这样支持两者的引擎中)。由于&&运算符是可交换的,因此您始终可以使用任何一侧作为(正或负)前瞻部分。类与被否定的类的交集也可以用负前瞻来实现。因此,上面的例子也可以转换为:
(?![bc])[a-z]
avwztpqn3#
the v flag:
v
[[a-z]&&[def]] [[a-z]&&[^bc]]
试试on regex101.com。你也可以做减法:[[a-z]--[bc]]。更多信息可以在MDN上找到。
[[a-z]--[bc]]
5vf7fwbs4#
你可以通过书写字符类来得到与JavaScript中的Java正则表达式相同的结果,例如。
Java JavaScript English ------------ ---------- ------- [a-z&&[def]] [def] d, e, or f [a-z&&[^bc]] [ad-z] a through z, except for b and c
只是在某些情况下有点冗长/晦涩。
Java JavaScript ---------------- ----------- [A-Z&&[^QVX]] [A-PR-UWYZ] [A-Z&&[^CIKMOV]] [ABD-HJLNP-UW-Z]
4条答案
按热度按时间mklgxw1f1#
在JavaScript中有等价的吗?
简单的回答:不,没有。它是特定的Java语法。
参见:Jan Goyvaerts和Steven Levithan的Regular Expressions Cookbook这里有一个相关部分的预览。
可能不用说,但下面的JavaScript代码:
与Java代码相同:
v64noz0r2#
正如其他人所说的,没有等价物,但是可以使用look-ahead实现
&&
的效果。转换为:变成:
例如,在Java中:
与下面的行为相同:
这在JavaScript中完全支持。我不知道这两种形式的相对性能(在像Java和Ruby这样支持两者的引擎中)。
由于
&&
运算符是可交换的,因此您始终可以使用任何一侧作为(正或负)前瞻部分。类与被否定的类的交集也可以用负前瞻来实现。因此,上面的例子也可以转换为:
avwztpqn3#
2023回答:是的,有。
the
v
flag:试试on regex101.com。
你也可以做减法:
[[a-z]--[bc]]
。更多信息可以在MDN上找到。5vf7fwbs4#
你可以通过书写字符类来得到与JavaScript中的Java正则表达式相同的结果,例如。
只是在某些情况下有点冗长/晦涩。