提问者:小点点

反斜杠-正则表达式-Javascript


我想构建一个JS函数,将一系列参数连接到一个有效的路径(因为我不能确定路径的一部分是带斜杠还是不带斜杠)

这就是功能:

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

使用的正则表达式匹配http://regexpal.com上的所有开头和结尾斜杠和反斜杠,但函数不能正常工作(正则表达式不匹配)。此外,铬态

syntaxError:无效的正则表达式:/()$^()/:未终止的组

当我只是使用RegEx

 (\\)$|^(\\)

但是,使用正则表达式

 (\\)$|^(\\)

工作正常。

是太晚了还是我错过了什么特别的东西?

提前谢谢!

狮子座


共2个答案

匿名用户

在对replace的调用中,应使用正则表达式文字(/.../)而不是字符串文字(“。。。”“。。。”)。字符串对反斜杠有自己的解释,在正则表达式构造函数开始使用反斜杠之前就开始使用,因此需要额外的引用级别。

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

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

但在正则表达式文本中,还必须在正斜杠前面加上反斜杠,因为正斜杠是整个文本的分隔符:

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

或者,如果您出于某种原因而与字符串的使用结合在一起,这也应该是可行的:

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

顺便说一句,当您的备选项是单个字符时,(xy)是过分杀戮的;您可以只使用字符类:[xy]。在这种情况下,您将得到以下结果:

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

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

匿名用户

试试这个。。。用“类”这个角色比较容易理解。要将单个\与javascript字符串匹配,您需要\\\\,可能就是这样。

新正则表达式('^[\\\\/][\\\\/]$')

您还可以尝试/^[\\\/][\\\/]$/g表示法。

s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))