我想构建一个JS函数,将一系列参数连接到一个有效的路径(因为我不能确定路径的一部分是带斜杠还是不带斜杠)
这就是功能:
concatPath = function() {
var path = "";
for(var i = 0; i < arguments.length; i++) {
path += arguments[i].replace("(\\|/)$|^(\\|/)", "") + "/";
}
return path;
}
使用的正则表达式匹配http://regexpal.com上的所有开头和结尾斜杠和反斜杠,但函数不能正常工作(正则表达式不匹配)。此外,铬态
syntaxError:无效的正则表达式:/()$^()/:未终止的组
当我只是使用RegEx
(\\)$|^(\\)
但是,使用正则表达式
(\\)$|^(\\)
工作正常。
是太晚了还是我错过了什么特别的东西?
提前谢谢!
狮子座
在对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, ''))