2012-07-16 105 views
1

在JavaScript中,我将如何从"John Smith - Jane Doe"获得['John Smith', 'Jane Doe'],其中-可以是任何分隔符(\/, + * : ;)等等,使用正则表达式?
使用new RegExp('[a-zA-Z]+[^\/|\-|\*|\+]', 'g')只会给我["John ", "Smith ", "Jane ", "Doe"]正则表达式 - 匹配字组

+0

你总是会有两个词? – 2012-07-16 09:24:19

+0

如果你打算投票,那么请留下评论,为什么你这样做 – 2012-07-16 09:24:48

+0

这是问题,它可能不限于两个字 – 2012-07-16 09:25:09

回答

2

试试这个,没有正则表达式:

var arr = str.split(' - ') 

编辑

多重分隔符:

var arr = str.split(/ [-*+,] /) 
+1

什么是否定性?这工作,不需要正则表达式。 – elclanrs 2012-07-16 09:32:10

+0

不是我的dv,但是OP特别说*“......其中'-'可以是任何分隔符(''''/'',''+''*'':'';')等等。 ..“*,所以这不是一个有用的答案。 – 2012-07-16 09:32:42

+0

''可以替换为任何东西。 – elclanrs 2012-07-16 09:33:10

1

如果你想匹配多个单词,你需要在你的字符类的空间。我认为像/[ a-zA-Z]+/g将是一个起点,通过exec或通过String#match重复使用,如下所示:Live copy | source

var str = "John Smith - Jane Doe"; 
var index; 
var matches = str.match(/[ a-zA-Z]+/g); 
if (matches) { 
    display("Found " + matches.length + ":"); 
    for (index = 0; index < matches.length; ++index) { 
    display("[" + index + "]: " + matches[index]); 
    } 
} 
else { 
    display("No matches found"); 
} 

但它非常有限,庞大的名称数量比AZ,你可能会想反转的逻辑和使用否定的类(/[^...]/g,其中...是可能的分隔符列表其他字符)。你不想离开“伊丽莎白·佩尼亚”或“杰拉德·豪夫特”出来! :-)