2011-12-21 67 views
0

我想弄清楚JS中的两个字符之间匹配的正则表达式,但可以像两个不同的变体,所以它需要知道这一点。我需要逗号和(或逗号和字母后面跟一个句之间匹配(“T”)在JavaScript中做正则表达式来匹配两个字符

这里的数据我:

Doe, John (SUP) 
Doe, John T. (SUP) 
Doe, John Smith (SUP) 
Doe, John Smith T. (SUP) 
Doe, John-Smith (SUP) 
Doe, John-Smith T. (SUP) 

我需要匹配刚刚从名字。这所以会是这样:

John 
John 
John Smith 
John Smith 
John-Smith 
John-Smith 

下面的代码我到目前为止:

var nameLinkAdd = nameLink.match(/\,(.*?)\(/g); 

任何建议谢谢!

+0

你可以先分开它们每行 – Ibu 2011-12-21 00:23:05

+0

顺便说一句,它只会每次只有一行。我只是给了所有不同的可能性(至少我认为所有的可能性)。但是,这将只是一个名称,将被替换。 – zen 2011-12-21 02:25:20

回答

0

这将工作,如果你不一定有(SUP)之后。也就是说,它会在

Doe, John 
Doe, John-Smith 

nameLink.match(/\, *([A-Za-z]+(?:[- ]+[A-Za-z]+\b(?!\.))*)/)' 

工作(?!.)确保你没有捕获任何后跟一个peroid .

如果你想避免lookarounds(可能是一个速度问题,虽然如此短的字符串,我不这么认为),尝试:

nameLink.match(/\, *([A-Z][a-z]+(?:[- ]+[A-Z][a-z]+)*)/)' 

然而,这假定所有的名字有一个以上的信,并从一个大写开始,后面跟着小写(这似乎是合理的,是否有任何内部大写字母或名称只包含一个字母的名称?)

+0

我认为这是安全的假设。我不认为有一个字母的名字或任何奇怪的东西。用你的正则表达式,它也会选择这个逗号和空格。像“约翰”。这不是为了你吗? – zen 2011-12-21 02:16:46

+0

它*匹配逗号,但名称本身在组1中(第一组捕获括号)。 – 2011-12-21 02:20:38

0

我喜欢用http://regexpal.com/来计算正则表达式。

+0

我使用http://gskinner.com/RegExr/这是一个非常可靠的工具,但是正则表达式,尤其是更复杂的正则表达式,只是让我的思绪在各处争论不休,最终我只是碰到一个凹凸,无法继续。 – zen 2011-12-21 02:18:16

0

尝试:

nameLink.match(/^(\w+(?:\s*\w+)*)\s+(?:\w\.)?\()/); 

你想将在组1

normal* (special normal*)*又是什么;)

  • 正常= \w
  • 特殊= \s*
+0

这仍然捕获上面的'T'。 – 2011-12-21 00:25:07

+0

斑点。修复... – fge 2011-12-21 00:28:53