Java和javascript中的正则表达式

regular expression  in java and javascript

本文关键字:正则表达式 javascript Java      更新时间:2023-09-26

在java和js中使用正则表达式'b有什么不同吗?
我试了下面的测试:
在javascript中:

console.log(/'w+'b/.test("test中文"));//true  

in java:

String regEx = "''w+''b";
text = "test中文";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
    System.out.println("matched");//never executed
}

为什么上面两个例子的结果不一样?

这是因为默认情况下Java支持'b的Unicode,但不支持'w,而JavaScript不支持两者的Unicode。

所以'w只能匹配[a-zA-Z0-9_]字符(在我们的例子中是test),但'b不能接受位置(用|标记)

test|中文

在字母和非字母Unicode标准之间,因为t都被Unicode认为是字母字符。

如果你想让'b忽略Unicode,你可以使用查找机制并将其重写为(?:(?<=''w)(?!''w)|(?<!''w)(?=''w)),或者在这个例子中,简单的(?!''w)代替''b也可以工作。

如果你想让'w也支持Unicode,用Pattern.UNICODE_CHARACTER_CLASS标志编译你的模式(也可以写成标志表达式(?U))

java正则表达式查找单词字符序列,即在单词边界之前的[a-zA-Z_0-9]+。但是中文不适合'w。如果您单独使用''b,您将找到两个匹配:字符串的开始和结束。

正如georg所指出的,Javascript解释字符的方式与Java的Regex引擎不同。