【问题标题】:Concatenating with Regular Expressions与正则表达式连接
【发布时间】:2012-05-28 12:09:45
【问题描述】:

我有一个获取 URL 路径并将其添加为 body 类的 JQuery 函数:

var pathname = window.location.pathname;
var pathSlashesReplaced = pathname.replace(/\//g, " ");
var pathSlashesReplacedNoFirstDash = pathSlashesReplaced.replace(" ","");
var newClass = pathSlashesReplacedNoFirstDash.replace(/\(\d*\)/g, '').replace(/\s/, '-');

    $("body").addClass(newClass);
    if ( $("body").attr("class") == "") 
    {   

        $("body").addClass("class");

    }

.. 所以如果 url 类似于 /myapp/user/list,那么 body 类最终会是:

<body class="myapp-user list">

问题是我希望所有三个单词都带有破折号,所以应该是:

<body class="myapp-user-list">

.. 然后我可以使用 CSS 主题化:

.myapp-user-list {

}

我很确定我的 RegEx 存在问题,但我不知道在哪里。我尝试了各种文本函数,但问题是它从页面中抓取了所有文本并将其作为正文类放入:

var text = $(this).text();
var newClass  = $.trim(text.replace(/\(\d*\)/g, '').toLowerCase()).replace(/\s/, '-');

【问题讨论】:

    标签: javascript jquery regex text replace


    【解决方案1】:

    试试:

    var newClass = location.pathname.split('/').join('-').replace(/(^-|-$)/g,''),
        $body = $("body").addClass(newClass);
    
    if ($body.attr("class") == "") {   
        $body.addClass("class");
    }
    

    我会避免使用类名class。它可能会带来问题。

    【讨论】:

    • 很好的答案,但您仍然需要修剪前导“/”以防止拆分前不需要的前导“-”。
    • ...pathname.replace(/^\/+/, '').split...怎么样
    • 这是一个很酷的方法,加上@MarkM 的代码,效果很好。我认为如果路径更深或更短,这更具可扩展性
    • 答案已编辑-感谢@Mark M-我选择首先将所有/ 转换为-,然后去除前导和尾随-。这稍微简单一些,因为它避免了在 regExp 中转义 / 的需要。我不认为+ 量词是必要的,因为// 永远不会出现在路径中。
    • @Beetroot-Beetroot:乐于助人。不想成为一个肇事逃逸的批评者。你的观点很好 - 我没有花时间真正磨练我的答案,一旦我得到了一些有效的东西,我就按照主要想法。我正在努力提高答案的质量。
    【解决方案2】:

    尝试将g 修饰符添加到第二个替换以替换所有空格,而不仅仅是第一个。

    var newClass = pathSlashesReplacedNoFirstDash.replace(/\(\d*\)/g, '').replace(/\s/g, '-');
    

    【讨论】:

      【解决方案3】:

      我认为应用这两个正则表达式就可以了。

      "/\//-/g"   Will change all slashes to -
      "/-//"      Will only remove the first - 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2010-09-12
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        相关资源
        最近更新 更多