yug*_*uge 6 javascript java regex
相同的正则表达式,不同的结果;
爪哇
String regex = "Windows(?=95|98|NT|2000)";
String str = "Windows2000";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
System.out.println(m.matches()); // print false
Run Code Online (Sandbox Code Playgroud)
JavaScript
var value = "Windows2000";
var reg = /Windows(?=95|98|NT|2000)/;
console.info(reg.test(value)); // print trueRun Code Online (Sandbox Code Playgroud)
我不明白为什么会这样?
从 JavaMatcher#matches()方法的文档中:
尝试将整个区域与模式匹配。
匹配器 API 正在尝试将您的模式应用于整个输入。这失败了,因为 RHS 部分是零宽度正前瞻。所以,它可以匹配Windows,但2000部分不匹配。
一个更好的 Java 代码版本,以表明它并没有真正“损坏”,应该是这样的:
String regex = "Windows(?=95|98|NT|2000)";
String str = "Windows2000";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println(m.group()); // prints "Windows"
}
Run Code Online (Sandbox Code Playgroud)
现在我们看到Windows正在打印,这是匹配的实际内容。