[英]split comma separated string by comma
需要拆分包含由逗號(,)分隔的國家名稱的字符串,並且國家名稱本身也包含逗號(,) 。
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",
]
通常,您不想使用可以在有效國家/地區出現的字符作為分隔符,也就是,
但是,如果我們可以假設,
僅在用作分隔符時才會顯示為沒有空格。 然后我們可以使用正則表達式來拆分字符串:
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 運行時之間有所不同。
運行時測試:
SyntaxError: invalid regexp group
。 事實證明,Mozilla還沒有實施“積極的背后”標准。Script error
。 同樣在這里,事實證明微軟還沒有實施“積極的背后”標准。查看 TC39 我們可以看到“積極的背后”是 ES2018 規范的一部分。 因此,它有望在不久的將來在所有主要瀏覽器中實現。
如果字符串的格式與上述格式相同,則首先需要用逗號分割字符串。 如果結果數組中的項目以空格開頭,則將該項目與結果數組中的前一個項目合並。 帶逗號的國名,逗號后有空格,有的則沒有
可能有一種方法可以通過正則表達式來完成,但我建議使用簡單的方法。 查看您的輸入,您可以看到將國家名稱與其名稱分開的那些逗號后跟一個空格,而列表逗號后不跟一個: 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("$", ", "));
}
這當然不是最高效的解決方案。 但它是一個。
只需使用正則表達式!
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]) 來獲取所有由字母包圍的逗號並將它們分開(“ , "在這種情況下沒有被分割並且返回是正確的)! 測試和工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.