反斜杠 - 正则表达式 - Javascript

时间:2012-05-26 21:33:09

标签: javascript regex

我想构建一个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声明

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

当我使用RegEx

 (\\)$|^(\\)

但是,使用RegEx

 (\\)$|^(\\)

工作正常。

为时已晚还是我错过了一些特别的东西?

提前致谢!

利奥

2 个答案:

答案 0 :(得分:14)

您应该在调用/.../时使用正则表达式文字('...')而不是字符串文字("..."replace)。字符串有自己的反斜杠解释,在正则表达式构造函数获得破解之前启动,所以你需要额外的引用级别。

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

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

但是在正则表达式字面值中,你还必须在正斜杠前放入反斜杠,因为正斜杠是整个事物的分隔符:

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

或者,如果您因某种原因与字符串的使用结婚,这也应该有效:

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

作为旁注,当您的替代品是单个字符时,(x|y)过于苛刻;你可以使用字符类:[xy]。在这种情况下,你得到这个:

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

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

答案 1 :(得分:5)

试试这个... [字符类]更容易理解。将单个\与您需要的{j}字符串匹配\\\\,这可能是正在发生的事情。

new Regexp('^[\\\\/]|[\\\\/]$')

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

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