簡體   English   中英

用逗號分隔逗號分隔的字符串

[英]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 運行時之間有所不同。

運行時測試:

  • V8 (包括 Node):按預期工作
  • SpiderMonkey :拋出SyntaxError: invalid regexp group 事實證明,Mozilla還沒有實施“積極的背后”標准。
  • ChakraCore :拋出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM