【问题标题】:Javascript Regex - match capital/upperacase letter in a middle of a word (in a sentence)?Javascript Regex - 匹配单词中间的大写/大写字母(在一个句子中)?
【发布时间】:2017-11-28 10:15:27
【问题描述】:

我需要匹配所有位于单词中间的大写字母。例如RegExr 将匹配字母EsomeThings 为信 T。 如果大写字母从单词的开头开始,则不应匹配。

这个正则表达式几乎匹配它,但它实际上匹配大写字母旁边的两个小写。

/[a-z][A-Z]/g

例如对于单词RegExr,它匹配gE,但我只需要匹配E

更新

更新了标题以指定这种情况发生在一个句子中,而不是单个单词中。

【问题讨论】:

    标签: javascript regex uppercase


    【解决方案1】:

    应该这样做:

    /\B[A-Z]\B/g
    

    使用\B 作为单词边界

    有关测试和说明,请参阅here

    【讨论】:

    • 一个单词的中间,而不是“不在字符串的开头”。这实际上并没有回答 OP 的问题。
    • @SebastianLenartowicz 更新(我认为他的字符串包含一个单词)
    【解决方案2】:

    您也许可以在此处使用非单词边界。单词字符(\w)是字母[a-zA-Z]、数字[0-9]和下划线_

    通过使用\B[A-Z]\B,您可以匹配单词中的每个大写字母。这也将匹配:

    • 9Gag
    • _H_ello

    【讨论】:

    • 谢谢,这看起来很优雅的正则表达式。
    • 好像只有一个\B就够了(一开始)。至少在regexr.com 中它匹配相同的模式。
    • @Andrius 取决于您如何定义单词中间。对我来说 hellO 应该没有匹配,但它会没有结尾 \B
    • 是的,我猜你是对的,在这种情况下它不应该匹配。
    【解决方案3】:

    使用RegExp.prototype.exec()函数的解决方案:

    var str = 'RegExr someTextBetween JavaScript',
        matched = [],
        re = /[^A-Z\s]([A-Z])[^A-Z\s]/g;
        
    while ((m = re.exec(str)) !== null) {
        matched.push(m[1]);
    }
    console.log(matched);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2016-01-10
      • 2011-07-20
      • 1970-01-01
      • 2020-06-23
      相关资源
      最近更新 更多