以简单的方式包含重音字符有什么好的正则表达式?

时间:2014-07-10 12:33:51

标签: regex

现在我的正则表达式是这样的:

[a-zA-Z0-9]但它不包含我想要的重音字符。我也想 - ',包括在内。

5 个答案:

答案 0 :(得分:11)

重音字符:DIY字符范围减法

如果你的正则表达式引擎允许它(很多人会),这将有效:

(?i)^(?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ])+$

请参阅the demo(您可以添加要测试的字符)。

<强>解释

  • (?i)设置不区分大小写的模式
  • ^锚点断言我们位于字符串的开头
  • (?:(?![×Þß÷þø])[-'0-9a-zÀ-ÿ])匹配一个字符......
  • 前瞻(?![×Þß÷þø])断言char不是括号中的一个
  • [-'0-9a-zÀ-ÿ]允许在宽重音范围内使用短划线,撇号,数字,字母和字符,我们需要从中减去
  • +匹配一次或多次
  • $锚点断言我们位于字符串的末尾

<强>参考

Extended ASCII Table

答案 1 :(得分:2)

@NightCoder 的回答很完美:

\p{L}\p{M}

并且没有脆弱的白名单。请注意,要使其在 javascript 中工作,您需要添加 unicode u 标志。在 javascript 中有一个工作示例很有用...

[..."Crêpes are øh-so déclassée".matchAll(  /[-'’\p{L}\p{M}\p{N}]+/giu  )]

将返回类似...

[
    {
        "0": "Crêpes",
        "index": 0
    },
    {
        "0": "are",
        "index": 7
    },
    {
        "0": "øh-so",
        "index": 11
    },
    {
        "0": "déclassée",
        "index": 17
    }
]

这是在操场上... https://regex101.com/r/ifgH4H/1/

还有一些关于那些正则表达式 unicode 类别的细节...https://javascript.info/regexp-unicode

答案 2 :(得分:0)

使用POSIX字符类(http://www.regular-expressions.info/posixbrackets.html):

[-'[:alpha:]0-9][-'[:alnum:]]

[:alpha:]字符类匹配任何被认为是&#34;字母字符&#34;在你的语言环境中。

答案 3 :(得分:0)

没有排除规则的版本:

^[-'a-zA-ZÀ-ÖØ-öø-ÿ]+$

<强>解释

  • ^锚点断言我们位于字符串的开头
  • [...]允许短划线,撇号, 数字,字母和字符在宽重音范围内,
  • +匹配一次或多次
  • $锚点断言我们位于字符串的末尾

<强>参考

答案 4 :(得分:0)

您刚刚输入:

\p(L}\p{M}

在您的表情中。 Unicode中的将匹配:

  • 任何语言的任何字母字符(L)
  • 并标记(M)(即,要与另一个字符组合的重音符号,等等)
相关问题