一尘不染

反斜杠-正则表达式-Javascript

javascript

我想构建一个JS函数,将一个参数列表隐藏到有效路径中(因为我不确定路径的一部分是否带有斜杠)

这是功能:

concatPath = function() {
    var path = "";
    for(var i = 0; i < arguments.length; i++)   {
        path += arguments[i].replace("(\\|/)$|^(\\|/)", "") + "/";
    }
    return path;
}

使用的RegEx匹配了http://regexpal.com上的所有开始和结束斜杠和反斜杠,但是该功能无法正常工作(RegEx不匹配)。此外,Chrome指出

语法错误:无效的正则表达式:/()$ | ^()/:未终止的组

当我只使用RegEx

 (\\)$|^(\\)

但是,使用RegEx

 (\\)$|^(\\)

提前致谢!

狮子座


阅读 1494

收藏
2020-04-25

共1个答案

一尘不染

您应在调用时使用正则表达式文字(/.../)而不是字符串文字('...'"..."replace。字符串对反斜杠有自己的解释,反斜杠会在正则表达式构造函数对其进行破解之前插入,因此您需要额外的引用级别。

匹配一个反斜杠,正则表达式文字: /\\/

在字符串中匹配一个反斜杠,正则表达式: '\\\\'

但是,在正则表达式文字中,您还必须在反斜杠前面加上反斜杠,因为正斜杠是整件事的定界符:

path += arguments[i].replace(/(\\|\/)$|^(\\|\/)/, "") + "/";

或者,如果由于某种原因而对字符串的使用感到满意,这也应该起作用:

path += arguments[i].replace("(\\\\|/)$|^(\\\\|/)", "") + "/";

顺便提一句,当您的替代字符是单个字符时,(x|y)会显得过分杀伤;您可以只使用字符类:[xy]。在这种情况下,您得到以下信息:

path += arguments[i].replace(/[\\\/]$|^[\\\/]/, "") + "/";

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";
2020-04-25