【问题标题】:modify a regex so that only [a-zA-Z] is captured [duplicate]修改正则表达式,以便仅捕获 [a-zA-Z] [重复]
【发布时间】:2018-02-17 15:29:34
【问题描述】:

我有以下正则表达式: /i'm [a-zA-Z]|i am [a-zA-Z]*/i 它在检测短语何时与正则表达式匹配方面起作用,但我特别试图捕获[a-zA-Z] 部分。 例如:

"I'm sam" // -> sam I am good at this // -> good

如果这个问题需要改进,请告诉我。 提前致谢! ^^

【问题讨论】:

    标签: javascript regex capturing-group


    【解决方案1】:

    截至 2018 年,Javascript 终于支持后向断言,因此一旦实现以下内容,在最新的浏览器中应该可以工作:

    test = "i am sam";
    
    console.log(test.match(/(?<=i'm |i am )[a-zA-Z]+/))

    UPD:在撰写本文时,只有 Chrome 可以做到这一点,所以这个答案将在几个月后生效。与此同时,

    test = "i am sam";
    
    console.log(test.match(/(?:i'm |i am )([a-zA-Z]+)/)[1])

    【讨论】:

    • 您可能需要 RegExp 上的不区分大小写标志,如果匹配给出 null,则可能存在引用错误
    • @PaulS.: CW'ed,随意编辑。
    • 感谢您的回答!抱歉,如果我的问题是重复的,我真的不确定要搜索什么来检查它是否是重复的。
    • @BenRivers:别担心,欢迎来到 StackOverflow!
    【解决方案2】:

    您可以使用捕获组([a-zA-Z]+) 来捕获您的文字:

    I ?['a]m ([a-zA-Z]+)

    这将匹配

    我#匹配我 ? # 匹配一个可选的空格 ['a]m # 匹配 ' 或 a 后跟一个 m 和一个空格 ( # 抓拍成组 [a-zA-Z]+ # 匹配小写或大写字符一次或多次 ) # 关闭捕获组

    你的话在第 1 组。

    var pattern = /I ?['a]m ([a-zA-Z]+)/;
    var strings = [
      "I am good at this",
      "I'm sam"
    ];
    
    for (var i = 0; i < strings.length; i++) {
      console.log(strings[i].match(pattern)[1]);
    }

    【讨论】:

    • @Downvoter:如何改进我的答案?
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2011-04-01
    • 2015-01-07
    相关资源
    最近更新 更多