JavaScript Regex 没有 \p{L} 吗?在 JS 正则表达式中使用 Unicode

No \p{L} for JavaScript Regex ? Use Unicode in JS regex

我需要添加 a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ x 次,但我发现这非常难看。所以我尝试 \p{L} 但它在 JavaScript.

中不起作用

有什么想法吗?

我的实际正则表达式:[a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ][a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ' ,"-]*[a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ'",]+

我想要这样的东西:[\p{L}][\p{L}' ,"-]*[\p{L}'",]+(或小于实际表达式)

您有 XRegExp 插件来支持 unicode 字母匹配器:

var unicodeWord = XRegExp("^\pL+$"); // L: Letter

在这里您可以看到更多匹配 unicode 的例子 javascript

http://xregexp.com/plugins/

您需要添加的是您要求的部分内容。首先,您应该定义所需的字符集。 \pL 表示每种语言的每个字母。

它有点丑,但不影响性能,是解决 JS 中此类问题的最佳解决方案。 ECMA2018 支持 \pL,但所有主流浏览器都无法实现。

如果是个人品味,你可以把这种丑陋程度降低一点:

var characterSet = 'a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ';
var re = new RegExp('[' + characterSet + ']' + '[' + characterSet + '\' ,"-]*' + '[' + characterSet + '\'",]+');

此更新归功于 @Francesco

var pCL = 'a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ';
var re = new RegExp(`[${pCL}][${pCL}' ,"-]*[${pCL}'",]+`);
console.log(re.source);