2017-06-21 12 views
1

正規表現/\ s *、\ s */は、左スペースに続いてカンマと右スペースに一致します。Javascriptの中国語と一致する正規表現

例:Unicode文字と

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

しようとした分割文字:

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リンクを経てではなく、多くの情報があった漢字と

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

例私は私のシナリオで使うことができます。正規表現を作成して分割することは本当に不可能ですか?

+1

しかし、中国のコンマは、ASCIIカンマではありません。 'str.split(/ \ s *、\ s * /)'を使ってください。 –

答えて

2

ASCIIカンマは中国語のカンマと一致しません。中国の1(\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正規表現標準と互換性を持たせるためには、を\uD805\uDC4D\uD836\uDE87とする必要があります。

次カンマが処理されます。enter image description here

+0

strの値は任意の言語で指定できますが、このソリューションはどのロケールでも使用できますか? – quintin

+0

@quintin: '\ s'は、JS正規表現のUnicode空白にマッチします。カンマは、すべてのUnicodeカンマをサポートする必要がある場合は、Unicodeテーブルにあるすべてのカンマを含む文字クラスを作成する必要があります。コンマのための特別なクラスはなく、しかもJS正規表現はUnicodeカテゴリクラス( '\ p {...}'のもの)もサポートしていません。 Acc。 [this site](https://www.compart.com/en/unicode/based/U+002C)には3つのUnicodeカンマがあります: '[︐,,,]'。また、コンマコードについては、[comma Wiki page](https://en.wikipedia.org/wiki/Comma)を参照してください。 –

+0

ありがとう@Wiktorこれは非常に役に立ちます – quintin

関連する問題