4

我有以下正则表达式 -

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

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

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

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

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

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

4

3 回答 3

6

您可以使用:

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

改变的部分是:[hH][rR][eE][fF],这意味着:

匹配hor H, 后接ror R, 后接eor E, 后接for F


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

于 2013-02-20T06:43:36.580 回答
2

您不能使其部分区分大小写,但您始终可以具体:

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

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

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

于 2013-02-20T06:44:28.070 回答
0

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

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

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

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

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

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

于 2013-02-20T07:38:00.230 回答