从句子开头删除所有大写单词

时间:2016-06-27 13:58:05

标签: javascript regex

我有一组句子都以名字开头,比如

  

Humpty Dumpty倒下了   Mini Miny Moe去了密西西比州的Meadville   Little Piglet是一个尖叫声。

如何从句子中轻松取出名称?

正则表达式/([A-Z])\w+/g会为我提供大写的所有字词,但我不想在MeadvilleMississippi上点击。

因此,对于给定的示例,我想要以下输出:

"Humpty Dumpty", " fell down."  
"Mini Miny Moe", " went to Meadville, Mississippi."  
"Little Piglet", " is a squealer."

我需要将名称作为一个字符串,其余作为另一个字符串。如果它是两个字符串的数组或具有两个属性的对象 - 我不在乎,只要我将它们分开。

建议?

2 个答案:

答案 0 :(得分:4)

这应该这样做

/^([A-Z][a-z]* )+/

它将匹配:

Humpty Dumpty fell down. --> Humpty Dumpty
Mini Miny Moe went to Meadville, Mississippi. --> Mini Miny Moe
Little Piglet is a squealer. --> Little Piglet

修改

要像你放置的例子那样捕捉:

/^((?:[A-Z][a-z]* )+)(.*)/

它会给你几乎你想要的东西,不应该硬删除尾随空格或在你需要的地方添加空格:

Humpty Dumpty fell down. --> "Humpty Dumpty ", "fell down."
Mini Miny Moe went to Meadville, Mississippi. --> "Mini Miny Moe ", "went to Meadville, Mississippi."
Little Piglet is a squealer. --> "Little Piglet ", "is a squealer."

编辑2:

根据评论提供建议,因此您无需在创建群组后处理添加/删除空格:

/^([A-Z][a-z]*(?:\s+[A-Z][a-z]*)*)(.*)/

如果您需要RenéDescartes Shane Baker-Oropeza 作为名称:

/^([A-ZÁÉÍÓÚ][a-záéíóú]*(?:(?:\s|-)+[A-ZÁÉÍÓÚ][a-záéíóú]*)*)(.*)/

答案 1 :(得分:0)

您需要扩展业务规则。只是寻找以大写字母开头的单词之间的空格,可以让像Silver Spring,MD这样的城市顺利通过。每个以" New"开头的城镇也会溜走。

我不确定你会怎么做。

此外,如果您与城市数据表进行比较,则会删除与城市名称匹配的人名。例如,你有一位名叫Silver Spring的美国本土医生。如果他包括他的头衔,",MD",则完全匹配。