需要拆分包含用逗号(,)分隔的国家名称的字符串,并且国家名称本身也包含逗号(,)。
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",
]
答案 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)
是任何“单词”字符的前瞻。,
将匹配逗号字符,前提是前瞻和后瞻成功。 编辑:
在查看@BorisSokolov在评论中提出的问题后,很明显,主要的JavaScript运行时之间,正则表达式的实现有所不同。
运行时经过测试:
SyntaxError: invalid regexp group
。证明Mozilla haven't yet implemented是“正面看”的标准。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])将所有逗号括起来并除以(在这种情况下,“”不分割,返回正确)!经过测试,可以正常工作!