【问题标题】:javascript case-insensitive match for part of a string onlyjavascript 仅匹配部分字符串的大小写不敏感
【发布时间】:2013-02-20 06:40:34
【问题描述】:

我有以下正则表达式 -

bannerHtml.match(/href\s*=\s*[\"']{clickurl}(.*)[\"']/);

与以下匹配 -
href = "{clickurl}

现在,我希望href only 的匹配不区分大小写,而不是整个字符串。 我检查了添加 i 模式修饰符,但它似乎总是用于整个字符串 -

bannerHtml.match(/href\s*=\s*[\"']{clickurl}(.*)[\"']/i); 

更多详情 我希望以下所有内容都匹配 -
hREF = "{clickurl}
href = "{clickurl}
HREF = "{clickurl}

但是,大写的 clickurl 部分不应匹配 -
href = "{CLICKURL}

【问题讨论】:

    标签: javascript regex case-insensitive


    【解决方案1】:

    你可以使用:

    /[hH][rR][eE][fF]\s*=\s*[\"']{clickurl}(.*)[\"']/
    

    改变的部分是:[hH][rR][eE][fF],意思是:

    匹配hH,后跟rR,后跟eE,后跟fF


    如果你想让它成为通用的,你可以创建一个辅助函数来接收像abc这样的文本字符串并返回[aA][bB][cC]。它应该很简单。

    【讨论】:

    • 或者您可以将字符串转换为小写,然后针对小写正则表达式进行测试:)
    【解决方案2】:

    你不能让它部分区分大小写,但你总是可以具体的:

    bannerHtml.match(/[hH][rR][eE][fF]\s*=\s*["']{clickurl}(.*)["']/);
    

    对此的替代方法是使用辅助正则表达式丢弃错误匹配。

    请注意,不需要转义引号字符 ",因为只有斜杠 / 是分隔符。

    【讨论】:

    • 你能举个例子吗?至少有任何链接或指针吗?这种方法对我来说看起来不是很干净,因为我们必须为每个字符编写..
    • 你只能从正则表达式中得到这么多,你知道的。对每个字母都这样做可能很烦人,但你在这里只处理四个字符。这就是 /i 选项在内部所做的所有事情。您可以选择编写辅助表达式以确保 clickurl 是小写的。当这个调整后的表达式完成这项工作时,这似乎是在浪费时间。
    • @tadman 或者只是创建一个辅助函数(如果他将它与其他正则表达式一起使用,而不仅仅是href),它将把xyz 转换为[xX][yY][zZ]..
    • 对于任何重要的事情,四个字母肯定是微不足道的,输入一些括号和额外的字符不会造成任何严重的伤害或心理伤害。助手只会使事情复杂化。
    • 我们可以使用 (?i) (?-i) 选项吗?
    【解决方案3】:

    首先我必须说这是一个非常好的问题。我为您的问题想到了 2 个解决方案:

    1. 将所有href字符串设为小写:

      bannerHtml.replace(/href/ig,"href")

    2. 首先,我将 {clickurl} 用括号括起来 以供以后使用:({clickurl})。 然后,我匹配整个不区分大小写的字符串以查看它是否与模式匹配。最后,我检查了存储在result[1] 中的{clickurl} 字符串匹配,看看它是否在确切的情况下。

      var re=/href\s*=\s*[\"']({clickurl})(.*)[\"']/i;
      
      var result = re.exec(bannerHtml);
      
      if(result && result[1]=="{clickurl}"){
          //Match!
      }
      

    我知道它不是非常正则表达式解决方案,但我认为这是我能想到的最好的解决方案。祝你好运。

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 2011-02-06
      • 1970-01-01
      • 2022-11-14
      • 2010-11-26
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多