2017-06-21 59 views
1

我有一個正則表達式/\ s *,\ s */匹配左空格,後跟逗號,右空格。在Javascript中匹配漢字的正則表達式

例子:

var str = "john,walker james , paul"; 
var arr = str.split(/\s*,\s*/); 
Values in arr = [john,walker james,paul] // Size: 3 

例子有中國特色:

var str = "繼續,取消 繼續 ,取消"; 
var arr = str.split(/\s*,\s*/); 
Values in arr = ["繼續,取消 繼續 ,取消"] // Size: 1, All values at index 0 no splitting happened 

試圖分裂字符,Unicode字符:

var str = "john,walker james , paul"; 
var arr = str.split(/\u0020*\u002C\u0020*/); 
Values in arr = [john,walker james,paul] // Size: 3 

var str = "繼續,取消 繼續 ,取消"; 
var arr= str.split(/\u0020*\u002C\u0020*/); 
Values in arr = ["繼續,取消 繼續 ,取消"] 
// Size: 1, All values at index 0 no splitting happened 

我通過this鏈接去,但沒有太多的信息在那裏我可以在我的場景中使用。爲中文字符創建正則表達式並分割它們真的不可能嗎?

+1

但中國逗號不是一個ASCII逗號。使用'str.split(/ \ s *,\ s * /)'。 –

回答

2

ASCII逗號與您在中文文本中的逗號不匹配。無論是與中國一(\uFF0C)替換ASCII逗號(\x2C),或使用一個字符類[,,]同時匹配:

var str = "繼續,取消 繼續 ,取消"; 
 
console.log(str.split(/\s*[,,]\s*/));

這裏是一個正則表達式將匹配提到的所有逗號在Comma Wikipedia page

/\s*(?:\uD805\uDC4D|\uD836\uDE87|[\u002C\u02BB\u060C\u2E32\u2E34\u2E41\u2E49\u3001\uFE10\uFE11\uFE50\uFE51\uFF0C\uFF64\u00B7\u055D\u07F8\u1363\u1802\u1808\uA4FE\uA60D\uA6F5\u02BD\u0312\u0313\u0314\u0315\u0326\u201A])\s*/ 

注意U+1144DNEWA COMMA)和爲了與ES5正則表達式標準兼容,(SIGNWRITING COMMA)必須是transpiled,作爲\uD805\uDC4D\uD836\uDE87

以下逗號處理:enter image description here

+0

str的值可以使用任何語言,該解決方案是否可以與任何語言環境一起使用? – quintin

+0

@quintin:'\ s'匹配JS正則表達式中的任何Unicode空格。至於逗號,如果需要支持所有Unicode逗號,則需要創建一個包含Unicode表中所有逗號的字符類。沒有特殊的逗號類,而且,JS正則表達式甚至不支持Unicode類別類(那些'\ p {...}')。加。到[本網站](https://www.compart.com/en/unicode/based/U+002C)有3個Unicode逗號:'[︐,,,]'。另請參閱[逗號維基頁面](https://en.wikipedia.org/wiki/Comma)瞭解更多逗號代碼。 –

+0

謝謝@Wiktor這非常有幫助 – quintin