【问题标题】:RegEx for matching first names followed by no space用于匹配名字后跟没有空格的正则表达式
【发布时间】:2019-10-02 19:45:19
【问题描述】:

我想匹配一个首字母大写后跟其他字母字符但没有空格的名称,所以本质上是一个名字,例如:Kevin。

我有以下尝试,但似乎不起作用:

pattern = "([A-Z]\w+)(^\s)"

【问题讨论】:

  • 使用^[A-Z][a-z]+$\b[A-Z][a-z]+\b 应该足够好了。
  • 试试^[A-Z]\w+$
  • kalzumeus.com/2010/06/17/… 对于任何试图验证名称的人来说,这都是一本有趣的读物
  • 请记住,名称的中间可以有一个大写字母。例如:我的姓是 VanOost

标签: javascript html regex regex-negation regex-group


【解决方案1】:

您可以简单地用结尾 $ char 来绑定您的表达式,这就足够了:

([A-Z][a-z]+)$

如果你想添加更多的边界,你也可以用一个开始^ char:

^([A-Z][a-z]+)$

如果需要,您还可以删除捕获组,它仍然会匹配。

[A-Z][a-z]+$

正则表达式

您可以在regex101.com 中修改/更改您的表达方式。

正则表达式电路

您可以在jex.im 中可视化您的表达式:

JavaScript 演示

const regex = /([A-Z][a-z]+)$/gm;
const str = `Kevin`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

【讨论】:

    【解决方案2】:

    编辑:更新为在首字母大写之后包含任何单词字符。

    尝试像这样消极地展望未来:

    ([A-Z]\w+\b(?!\s))
    

    在上面的示例中,\b 在末尾查找单词边界,如果(?!\s) 找到空格,则正则表达式将失败。这与接受的答案之间的主要区别在于,它还会在设置多行标志时选择换行符并失败。

    与往常一样,这取决于您的用例。

    工作示例:

    const matchName = /([A-Z]\w+\b(?!\s))/
    console.log(matchName.test("kevin")) // false
    console.log(matchName.test("Kevin")) // true
    console.log(matchName.test("Kevin ")) // false
    console.log(matchName.test("KeVin")) // true
    console.log(matchName.test("Kevin\n")) // false

    【讨论】:

      【解决方案3】:

      我会使用 Emma 使用的 ([A-Z][a-z]+)$ 的变体。

      此 RegEx 将获取每个条目的名字,即使该条目只有名字也可以工作。

      名称将用换行符分隔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 2015-04-29
        • 1970-01-01
        • 2017-09-25
        • 2016-03-02
        • 1970-01-01
        • 2014-05-14
        相关资源
        最近更新 更多