我想构建一个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
(\\)$|^(\\)
工作正常。
为时已晚还是我错过了一些特别的东西?
提前致谢!
利奥
答案 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, ''))