【问题标题】:No \p{L} for JavaScript Regex ? Use Unicode in JS regex [duplicate]JavaScript 正则表达式没有 \p{L} 吗?在 JS 正则表达式中使用 Unicode [重复]
【发布时间】:2018-10-15 03:39:08
【问题描述】:

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

有什么想法吗?

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

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

【问题讨论】:

  • 我很难理解这个问题。你想匹配该字符集的多次出现吗?你能提供一个应该与你的正则表达式匹配的文本示例吗?
  • 您可以使用能够更好地处理非拉丁字母的正则表达式库,例如 XRegExp
  • 实际上我想做一个类似的东西 ` [\p{L}][\p{L}' ,"-]*[\p{L}'",]+ `代替:`[A-ZA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ] [A-ZA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ ' “ - ] * [A-ZA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ'”,] +`跨度>
  • 这很难看,但却是最好的解决方案。不要考虑性能。都是一样的。
  • 最后我用了这个:^(?!.*\/\/)[A-zÀ-ž][A-zÀ-ž\/]*[A-zÀ-ž-'" ]*[A-zÀ-ž'"]$

标签: javascript regex regular-language


【解决方案1】:

您需要添加的是您所要求的内容的一个子集。首先,您应该定义您需要的字符集。 \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);

【讨论】:

  • 我正在考虑类似的事情。可能带有模板字符串看起来更好:[a-z${pL}][a-z${pL}\\ ,"-]* ecc.. 或者可能不是
  • 谢谢,已相应更新。
  • @ctwheels 我可以改用\p{Letter}。我主要是在谈论一个已知的 unicode 属性,而不是实际上支持它的哪种语法。
【解决方案2】:

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

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

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

http://xregexp.com/plugins/

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2023-03-23
    • 2011-04-02
    • 1970-01-01
    • 2016-04-22
    • 2020-08-23
    相关资源
    最近更新 更多