如何保留拆分分隔符RegExp两侧的内容?

时间:2014-02-25 10:04:40

标签: javascript regex

我想分割一个包含多个名称的字符串,格式为Surname, First Name(s),Surname, First Name(s),逗号两边都没有空格作为分隔符:

var input = 'White, Sterling M.,Devinney, Michael,Bernal, Tracy';

input.split(/[^ ]{1},[^ ]{1}/g); //Outputs: ["White, Sterling M", "evinney, Michae", "ernal, Tracy"]

如何在逗号的两边保留/包含字符?它不一定需要是split,这与我来的结果最接近。

注意:如果你想知道,我从另一个系统得到这个列表,所以我没有选择更改我给的更容易的字符串解析。

欢迎任何帮助!

3 个答案:

答案 0 :(得分:4)

你需要使用lookbehind断言来使用.split()执行此操作,JavaScript不支持这些。但你可以匹配而不是分裂:

result = input.match(/(?: ,|, |[^,])+/g);

<强>说明:

(?:    # Start of group that matches either...
 [ ],  # a space followed by a comma
|      # or
 ,[ ]  # a comma, followed by a space
|      # or
 [^,]  # any character except a comma
)+     # one or more times.

live on regex101.com

答案 1 :(得分:1)

只需使用/,(?=[^ ])/

"White, Sterling M.,Devinney, Michael,Bernal, Tracy".split(/,(?=[^ ])/);

Output on Chrome console:
["White, Sterling M.", "Devinney, Michael", "Bernal, Tracy"]

您只需检查,,其中以下字符不是空格 虽然JS不支持lookbehinds,但它支持前瞻,因为我理解你的问题,这就是你需要的。

答案 2 :(得分:0)

试试这个

var input = new String('White, Sterling M.,Devinney, Michael,Bernal, Tracy');

var test = input.split(/[^ ]{1},[^ ]{1}/g);

for(var i = 0; i < (test.length-1); i++) {
    alert(test[0]);
    alert(test[1]);
    alert(test[2]);             
}