JavaScript中的中文逗号匹配和拆分的正则表达式
Regular expression to match and split on chinese comma in JavaScript
我有一个正则表达式 /\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
尝试使用 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
我经历了 link 但没有太多信息可以在我的场景中使用。汉字创建regex并拆分真的不可能吗?
ASCII 逗号与中文文本中的逗号不匹配。要么将 ASCII 逗号(\x2C
)替换为中文逗号(\uFF0C
),要么使用字符 class [,,]
来匹配两者:
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+1144D
(NEWA COMMA) and U+1DA87
(SIGNWRITING COMMA) have to be transpiled 为 \uD805\uDC4D
和 \uD836\uDE87
以便与 ES5 正则表达式标准兼容。
处理以下逗号:
截至 2018 年,JavaScript 中对新正则表达式功能的支持越来越多,因此要匹配中文,您只需这样做:
const REGEX = /(\p{Script=Hani})+/gu;
'你好'.match(REGEX);
// ["你好"]
诀窍是使用\p
并使用正确的脚本名称,Hani
代表汉字(中文)。完整的脚本列表在这里:http://unicode.org/Public/UNIDATA/PropertyValueAliases.txt
我成功了!
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');
}
只使用原版 javascript
const str = "继续,取消 继续 ,取消";
// replace all Chinese comma to English comma
const arr = str.replace(/,/ig, `,`).split(`,`);
console.log(`result arr`, arr);
我有一个正则表达式 /\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
尝试使用 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
我经历了
ASCII 逗号与中文文本中的逗号不匹配。要么将 ASCII 逗号(\x2C
)替换为中文逗号(\uFF0C
),要么使用字符 class [,,]
来匹配两者:
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+1144D
(NEWA COMMA) and U+1DA87
(SIGNWRITING COMMA) have to be transpiled 为 \uD805\uDC4D
和 \uD836\uDE87
以便与 ES5 正则表达式标准兼容。
处理以下逗号:
截至 2018 年,JavaScript 中对新正则表达式功能的支持越来越多,因此要匹配中文,您只需这样做:
const REGEX = /(\p{Script=Hani})+/gu;
'你好'.match(REGEX);
// ["你好"]
诀窍是使用\p
并使用正确的脚本名称,Hani
代表汉字(中文)。完整的脚本列表在这里:http://unicode.org/Public/UNIDATA/PropertyValueAliases.txt
我成功了!
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');
}
只使用原版 javascript
const str = "继续,取消 继续 ,取消";
// replace all Chinese comma to English comma
const arr = str.replace(/,/ig, `,`).split(`,`);
console.log(`result arr`, arr);