因此,以下正则表达式re
适用于JAVA,但不适用于javascript。这看起来像一个非常基本的问题。我怎样才能这样做,[A-Za-z]+
部分在js中是可选的?
var re = /\w+\s+[A-Za-z]+?/g;
var str = "John Smith";
$("#ret1").text(re.test(str)); // true
$("#ret12").text(re.test("sssa "));// false
答案 0 :(得分:5)
要匹配0个或更多字符(正如您的意图所示),您需要使用*
量词:
\w+\s+[A-Za-z]*
^
请参阅demo
+?
量词需要匹配至少1个字符或更多字符,但尽可能少地返回有效匹配。
我看到你混淆了?
和*?
量词。在?
之后+
或*
之后添加*
转换为所谓的 lazy 量词,意味着它们将匹配0(+
)或1 (A+
)个字符,然后是更多字符,但尽可能少。以下是JavaScript引擎支持的rexegg.com with the quantifiers的摘录:
A+?
- 一个或多个As,尽可能多(贪婪),如果引擎需要回溯(温顺)就放弃角色
A*
一个或多个As,尽可能少地允许整个模式匹配(懒惰)
A*?
零或更多As尽可能多(贪婪),如果引擎需要回溯(温顺),则放弃角色
A?
零或更多As,尽可能少地允许整个模式匹配(懒惰)
A??
零或一个A,一个如果可能(贪婪),如果引擎需要回溯(温顺),放弃角色
cc.eventManager.addListener( { event: cc.EventListener.TOUCH_ALL_AT_ONCE, swallowTouches: false, onTouchesBegan: onTouchesBegan, onTouchesEnded: onTouchesEnded }, this);
零或一个A,零,如果仍然允许整体模式匹配(懒惰)