用逗号分割逗号分隔的字符串

时间:2018-11-01 12:12:30

标签: javascript regex

需要拆分包含用逗号(,)分隔的国家名称的字符串,并且国家名称本身也包含逗号(,)

var str = "South Georgia and The South Sandwich Islands,Congo, Democratic Republic,Mauritania,Finland,Spain,Armenia,Mauritius,France,Sri Lanka,Aruba,Mayotte,French Guiana,Suriname,Australia,Mexico,French Polynesia,Svalbard and Jan Mayen,Austria,Micronesia, Federated States,French Southern Territories";

预期结果:

[   "South Georgia and The South Sandwich Islands",
    "Mexico",
    "French Polynesia",
    "Congo, Democratic Republic",
    "Svalbard and Jan Mayen",
    "Micronesia, Federated States",
]

4 个答案:

答案 0 :(得分:2)

通常,您不想使用可能在有效国家/地区显示的字符(也称为,
但是,如果我们可以假设,仅在用作分隔符时显示,周围没有空格。然后我们可以使用正则表达式分割字符串:

var str = "South Georgia and The South Sandwich Islands,Congo, Democratic Republic,Mauritania,Finland,Spain,Armenia,Mauritius,France,Sri Lanka,Aruba,Mayotte,French Guiana,Suriname,Australia,Mexico,French Polynesia,Svalbard and Jan Mayen,Austria,Micronesia, Federated States,French Southern Territories";
var res = str.split(/(?<=\w),(?=\w)/i);
console.log(res)

正则表达式解释:

  • (?<=\w)是任何“单词”字符的后缀。
  • (?=\w)是任何“单词”字符的前瞻。
  • ,将匹配逗号字符,前提是前瞻和后瞻成功。

互动示例:https://regexr.com/42b3e

编辑:

在查看@BorisSokolov在评论中提出的问题后,很明显,主要的JavaScript运行时之间,正则表达式的实现有所不同。

运行时经过测试:

  • V8(包括Node):按预期工作
  • SpiderMonkey:抛出 SyntaxError: invalid regexp group。证明Mozilla haven't yet implemented是“正面看”的标准。
  • ChakraCore:抛出Script error。同样,事实证明微软还没有实现“正向背后”标准。

查看TC39,我们可以看到"possitive look behind" is part of the ES2018 spec。因此,预计它将在不久的将来在所有主流浏览器中实现。

答案 1 :(得分:0)

如果字符串的格式与上述格式相同,则首先需要用逗号分割字符串。 如果结果数组中的项目以空格开头,则将该项目与结果数组中的上一个项目合并。 在带有逗号的国家/地区名称中,逗号后有一个空格,而其他人则没有

答案 2 :(得分:-1)

也许可以通过正则表达式来做到这一点,但我建议使用简单的方法。查看您的输入,您会看到将一个国家/地区的名称与名称分隔开的逗号后跟一个空格,而列出的逗号后没有一个逗号: var str = "South Georgia and The South Sandwich Islands,Congo, Democratic Republic,Mauritania,Finland,Spain,Armenia,Mauritius,France,Sri Lanka,Aruba,Mayotte,French Guiana,Suriname,Australia,Mexico,French Polynesia,Svalbard and Jan Mayen,Austria,Micronesia, Federated States,French Southern Territories";

因此,为了将两者分开,我建议将", "替换为输入中不会出现的特殊字符,例如"$"。之后,您可以除以","。然后,您可以将特殊字符替换回", "

function getCountryList(str) {
  var strWithSpecialCharacterReplaced = str.replace(", ", "$");
  var countryList = strWithSpecialCharacterReplaced.split(",");
  return countryList.map(countryString => countryString.replace("$", ", "));
}

这当然不是性能最高的解决方案。但这是一个。

答案 3 :(得分:-1)

只需使用正则表达式!

var str = "South Georgia and The South Sandwich Islands,Congo, Democratic Republic,Mauritania,Finland,Spain,Armenia,Mauritius,France,Sri Lanka,Aruba,Mayotte,French Guiana,Suriname,Australia,Mexico,French Polynesia,Svalbard and Jan Mayen,Austria,Micronesia, Federated States,French Southern Territories";
var res = str.split(/(?<=\w),(?=\w)/i);
console.log(res)

在此示例中,我使用(?= [A-zA-Z0-9])[,](?= [A-zA-Z0-9])将所有逗号括起来并除以(在这种情况下,“”不分割,返回正确)!经过测试,可以正常工作!