在Java中,我有Pattern.compile("^[.]+");
。它只匹配.
字符。
我将其更改为Pattern.compile("^.+");
,然后它与JavaScript中的任何字符匹配。
但是,在JavaScript中,^[\w.]+
匹配特殊字符,例如abc**
。我很困惑。
答案 0 :(得分:1)
我不知道为什么
/^[\w.]+/.test('abc**')
在js和java中的工作方式不同。
^[\w.]+
与abc**
不匹配,而与字符串does match的部分不匹配。根据您使用正则表达式的方式,它会在 整个 字符串中搜索匹配项,或者在 部分中搜索匹配强>字符串。
要尝试匹配 整个 字符串,请使用.matches()
Pattern.compile("^[\\w.]+").matcher("abc**").matches(); //false
Pattern.compile("^[\\w.]+").matcher("abc").matches(); //true
注意:此简写为Pattern.matches(regex, input);
要尝试匹配字符串的 部分 ,请使用.find()
Pattern.compile("^[\\w.]+").matcher("abc**").find(); //true
Pattern.compile("^[\\w.]+").matcher("abc").find(); //true
Pattern.compile("^[\\w.]+").matcher("**").find(); //false
要尝试匹配 整个 字符串,请在正则表达式的末尾添加$
,然后使用.test()
/^[\w.]+$/.test("abc**"); //false
/^[\w.]+$/.test("abc"); //true
要尝试匹配字符串的 部分 ,只需使用.test()
/^[\w.]+/.test("abc**"); //true
/^[\w.]+/.test("abc"); //true
/^[\w.]+/.test("**"); //false