反斜杠 - 正则表达式 - Javascript

Leo*_*lig 8 javascript regex

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

这是功能:

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

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

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

当我只使用RegEx时

 (\\)$|^(\\)
Run Code Online (Sandbox Code Playgroud)

但是,使用RegEx

 (\\)$|^(\\)
Run Code Online (Sandbox Code Playgroud)

工作良好.

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

提前致谢!

狮子座

Mar*_*eed 14

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

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

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

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

path += arguments[i].replace(/(\\|\/)$|^(\\|\/)/, "") + "/";
Run Code Online (Sandbox Code Playgroud)

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

path += arguments[i].replace("(\\\\|/)$|^(\\\\|/)", "") + "/";
Run Code Online (Sandbox Code Playgroud)

作为旁注,当你的选择是单个字符时,(x|y)是过分的; 你可以使用字符类:[xy].在这种情况下你得到这个:

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

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";
Run Code Online (Sandbox Code Playgroud)


age*_*t-j 5

尝试一下... [字符类]稍微容易一些。使单个\字符串与您需要的javascript字符串匹配\\\\,这可能是发生了什么。

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

您也可以尝试使用该/^[\\\/]|[\\\/]$/g符号。

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