是否有 JavaScript 正则表达式相当于 Java 正则表达式中的交集 (&&) 运算符?
在Java正则表达式中,您可以在字符类中使用交集运算符&&
来简洁地定义它们,例如
[a-z&&[def]] // d, e, or f
[a-z&&[^bc]] // a through z, except for b and c
JavaScript中是否有等效的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
简单的回答:不,没有。它是特定的Java语法。
请参阅:正则表达式食谱,作者:Jan Goyvaerts 和 Steven Levithan。这是相关部分一览。
可能不用说,但以下 JavaScript 代码:
会执行与 Java 代码相同的操作:
Simple answer: no, there's not. It is specific Java syntax.
See: Regular Expressions Cookbook by Jan Goyvaerts and Steven Levithan. Here's a sneak-peek to the relevant section.
Probably needless to say, but the following JavaScript code:
would do the same as the Java code:
正如其他人所说,没有等效的,但您可以使用前瞻来实现
&&
的效果。转换为:变为:
例如,Java 中的 this:
this: 具有相同的行为
与 JavaScript 中完全支持的 。我不知道这两种形式的相对性能(在支持这两种形式的 Java 和 Ruby 等引擎中)。
由于
&&
运算符是可交换的,因此您始终可以使用任一侧作为(正或负)前瞻部分。类与否定类的交集也可以通过否定前瞻来实现。所以上面的例子也可以改写为:
As others have said, there isn't an equivalent, but you can achieve the effect of
&&
using a look-ahead. The transformation is:becomes:
For instance, this in Java:
has the same behavior as this:
which is fully supported in JavaScript. I don't know the relative performance of the two forms (in engines like Java and Ruby that support both).
Since the
&&
operator is commutative, you can always use either side for the (positive or negative) look-ahead part.Intersection of a class with a negated class can also be implemented with negative look-ahead. So the example above could also have been transformed to:
2023回答:是的,有。
使用
v
标志:尝试 regex101.com。
您还可以进行减法:
[[az]--[bc]]
。更多信息请参阅MDN< /a>.2023 answer: Yes, there is.
With the
v
flag:Try them on regex101.com.
You can also do subtraction:
[[a-z]--[bc]]
. More information can be found on MDN.通过直接写出字符类,您可以获得与 JavaScript 中的 Java 正则表达式相同的结果,例如,
在某些情况下,它只是更冗长/晦涩一些,例如
You can get the same result as the Java regexes in JavaScript by writing out the character classes longhand, e.g.
It’s just a bit more verbose/obscure in some circumstances, e.g.