我想写一个正则表达式,它将提取大写[a-z]
个单词的短语。因此,如果它看到这个短语,它应该从
there is a land called America Fremerica where regex is King
我有一个正则表达式([A-Z][a-z]+ ?){1,}
拉出了Fremerica和King。
我希望它选择America Fremerica
。为什么不选择America
?这就是为什么它没有挑出这句话?
答案 0 :(得分:3)
你的正则表达式有效,但它并非捕获所有单词。正则表达式(a)+
将匹配字符串aaa
,但它只会捕获最后一个a
。要捕获所有三个a
,您需要使用括号内的通配符编写(a+)
。
所以在整个事情中加上另一组括号。你想捕捉重复。您也可以将{1,}
更改为+
,这是等效的。
((?:[A-Z][a-z]+ ?)+)
?:
阻止内部括号组成为捕获组。它没有必要,但它很高兴。
答案 1 :(得分:1)
你的正则表达式捕获尾随空格。这个正则表达式捕获一个大写单词,然后是0-n个更多这样的单词(整个匹配或组1 - 它们是相同的),它只捕获"America Fremerica"
(不是"America Fremerica "
)
([A-Z][a-z]+(?: [A-Z][a-z]+)*)
答案 2 :(得分:0)
它似乎在Javascript中按预期工作。看到这个小提琴:http://jsfiddle.net/9X83F/2/
HTML
<p id="result"></p>
的Javascript
var phrase = "there is a land called America Fremerica where regex is King";
var matches = phrase.match(/([A-Z][a-z]+ ?){1,}/g);
document.getElementById('result').innerHTML = matches;