在JavaScript中匹配和拆分中文逗号的正则表达式

时间:2017-06-21 07:09:06

标签: javascript regex split comma chinese-locale

我有一个正则表达式 / \ s *,\ s * / 匹配左侧空格,后跟逗号,然后右侧空格。

示例:

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

尝试使用unicodes拆分字符:

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链接,但在我的方案中我可以使用的信息不多。是否真的不可能为汉字创建正则表达式并拆分它们?

4 个答案:

答案 0 :(得分:6)

截至2018年,JavaScript对正则表达式新功能的支持越来越多,因此要匹配中文,您只需执行以下操作:

const REGEX = /(\p{Script=Hani})+/gu;
'你好'.match(REGEX);
// ["你好"]

诀窍是使用\p并使用正确的脚本名称,Hani代表汉字(中文)。脚本的完整列表在这里:http://unicode.org/Public/UNIDATA/PropertyValueAliases.txt

答案 1 :(得分:2)

ASCII逗号与中文文本中的逗号不匹配。将ASCII逗号(\x2C)替换为中文(\uFF0C),或使用字符类[,,]来匹配两者:



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)和U+1DA87SIGNWRITING COMMA)必须transpiled\uD805\uDC4D\uD836\uDE87为了与ES5正则表达式标准兼容。

处理以下逗号:enter image description here

答案 2 :(得分:0)

I did it and it works!

var re1 = new RegExp("^[\u4E00-\uFA29]*$"); //Chinese character range 
var re2 = new RegExp("^[\uE7C7-\uE7F3]*$"); //Chinese character range
str = str.replace(/(^\s*)|(\s*$)/g,'');
if ((re1.test(str)) || (re2.test(str))) {
  console.log('CHINESE CHAR');
}

答案 3 :(得分:0)

仅使用普通javascript

const str = "继续,取消   继续 ,取消";

// replace all Chinese comma to English comma
const arr = str.replace(/,/ig, `,`).split(`,`);


console.log(`result arr`, arr);