16

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

这是功能:

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

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

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

当我只使用 RegEx

 (\\)$|^(\\)

但是,使用正则表达式

 (\\)$|^(\\)

工作正常。

是太晚了还是我错过了一些特别的东西?

提前致谢!

狮子座

4

2 回答 2

21

您应该在/.../调用. 字符串有自己的反斜杠解释,在正则表达式构造函数被破解之前就开始了,所以你需要额外的引用。'...'"..."replace

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

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

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

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

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

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

附带说明一下,当您的替代品是单个字符时,(x|y)这太过分了;你可以只使用一个字符类([xy])。在这种情况下,您会得到:

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

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";
于 2012-05-27T00:13:42.623 回答
6

试试这个......使用[字符类]会更容易一些。将单个\与您需要的 javascript 字符串匹配\\\\,这可能是正在发生的事情。

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

你也可以试试这个/^[\\\/]|[\\\/]$/g符号。

s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))
于 2012-05-26T21:42:45.760 回答