2017-06-21 62 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