我想构建一个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)
尝试一下... [字符类]稍微容易一些。使单个\
字符串与您需要的javascript字符串匹配\\\\
,这可能是发生了什么。
new Regexp('^[\\\\/]|[\\\\/]$')
您也可以尝试使用该/^[\\\/]|[\\\/]$/g
符号。
s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15717 次 |
最近记录: |