在javascript正则表达式中使用javascript变量

时间:2009-11-30 14:58:44

标签: javascript regex

我只是习惯了正则表达式,并且不确定如何在其中使用JavaScript变量。

我的代码是:

if (window.location.hostname == 'localhost') {
    var $sURLDomain = 'http://localhost/';
}
else {
    var $sURLDomain = 'http://mysite.com';
}


$('#content a[href^=$sURLDomain]').addClass('internal');

基本上我根据我是在本地网址还是在线网址设置变量$sURLDomain

然后我想测试我的链接是否以$sURLDomain变量开头,并使用jQuery仅为这些特定链接添加类。

这似乎没有起作用,因此我不确定如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

试试这个:

$('#content a[href^="'+$sURLDomain+'"]').addClass('internal');

或者:

$('#content a').filter(function() {
    return this.href && this.href.substr(0, $sURLDomain.length) != $sURLDomain;
}).addClass('internal');

答案 1 :(得分:1)

$('#content a[href^=$sURLDomain]').addClass('internal');
  1. JavaScript不进行PHP样式的字符串插值。你必须说'#content a[href^='+sURLDomain+']'

  2. 使用$开始JavaScript变量是不常见的。有些人将它用作一种“匈牙利符号”风格的标志,该变量是来自jQuery或其他库的包装器对象。这是否是一个好主意是有争议的,但无论哪种方式都不使用$为变量添加前缀,因为这就是PHP的作用。

  3. [^=...]选择器检查文字字符串的属性值的开头。与问题标题相反,这里没有正则表达式。与正则表达式的唯一连接是使用^来表示'字符串的开头'。

  4. 如果某个字符对于网址中的选择器特殊,例如]\,则缺少转义意味着选择器表达式将会中断。在这种特殊情况下可能不太可能,但它可能更简单(并且更改域名更容易部署):

    for (var i= document.links; i-->0;)
        if (document.links[i].hostname===location.hostname)
            $(document.links[i]).addClass('internal');
    
相关问题