代码之家  ›  专栏  ›  技术社区  ›  Vincent Decaux

RegExp javascript:授权斜杠

  •  0
  • Vincent Decaux  · 技术社区  · 10 年前

    我有一个RegExp来格式化HTML输入中的URL。 我想删除所有不是字母或数字的字符。

    所以我写了这个正则表达式:

    return url.toLowerCase()
                .replace(/^\s+|\s+$/g, "") 
                .replace(/[_|\s]+/g, "-") 
                .replace(/[^a-z\u0400-\u04FF0-9-]+/g, "") 
                .replace(/[-]+/g, "-") 
                .replace(/^-+|-+$/g, "")
                .replace(/[-]+/g, "-");
    

    但现在,我想接受斜杠字符(/)。我如何通过我的替代品接受这个角色?我对RegExp不太确定。

    我想要这个字符串:

    类别/测试名称=狗

    成为:

    类别/测试名称狗

    1 回复  |  直到 10 年前
        1
  •  1
  •   Wiktor Stribiżew    10 年前

    如果你想遵循你的逻辑,你需要“保护” / 否定字符类中的符号(此处- /[^a-z\/\u0400-\u04FF0-9-]+/g -以便您不会过早将其移除),然后将其全部替换 -/- 只有 / 作为最后一步。请注意,您正在复制 .replace(/[-]+/g, "-") 步骤,您可以删除第一个。

    return url.toLowerCase()
                .replace(/^\s+|\s+$/g, "") 
                .replace(/[_\s]+/g, "-") 
                .replace(/[^a-z\/\u0400-\u04FF0-9-]+/g, "") 
                .replace(/^-+|-+$/g, "")
                .replace(/-+/g, "-")
                .replace(/-*\/-*/g, "/");
    

    url = "Category / Test name = dog";
    document.body.innerHTML = "Old: " + url.toLowerCase()
                .replace(/^\s+|\s+$/g, "") 
                .replace(/[_|\s]+/g, "-") 
                .replace(/[^a-z\u0400-\u04FF0-9-]+/g, "") 
                .replace(/[-]+/g, "-") 
                .replace(/^-+|-+$/g, "")
                .replace(/[-]+/g, "-");
                // and now
    document.body.innerHTML += "<br/>New: " + url.toLowerCase()
                .replace(/^\s+|\s+$/g, "") 
                .replace(/[_\s]+/g, "-") 
                .replace(/[^a-z\/\u0400-\u04FF0-9-]+/g, "") 
                .replace(/^-+|-+$/g, "")
                .replace(/-+/g, "-")
                .replace(/-*\/-*/g, "/");