Java和javascript中的正则表达式
regular expression in java and javascript
在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引擎不同。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式