正则表达式为一串大写单词?

时间:2014-05-09 01:14:26

标签: regex

我想写一个正则表达式,它将提取大写[a-z]个单词的短语。因此,如果它看到这个短语,它应该从

中拉出“America Fremerica”和“King”
there is a land called America Fremerica where regex is King

我有一个正则表达式([A-Z][a-z]+ ?){1,}拉出了Fremerica和King。

我希望它选择America Fremerica。为什么不选择America?这就是为什么它没有挑出这句话?

3 个答案:

答案 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]+)*)

查看live demo

答案 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;