Javascript 如果需要,可以使用正则表达式在字符串中添加前导斜杠和尾随斜杠

Javascript 如果需要,可以使用正则表达式在字符串中添加前导斜杠和尾随斜杠,javascript,regex,Javascript,Regex,我遇到了一个问题,如果字符串中没有前导斜杠和尾随斜杠,我需要将它们添加到字符串中,或者如果字符串中已经有斜杠,则什么也不做 例如: "/path" => "/path/" "path/" => "/path/" "path" => "/path/" "/path/" => "/path/" "/" => "/" "" => "/" 我尝试使用此正则表达式,但它没有添加尾随斜杠: '/path'.replace(/(^\/?)|(\/?$)/, '/

我遇到了一个问题,如果字符串中没有前导斜杠和尾随斜杠,我需要将它们添加到字符串中,或者如果字符串中已经有斜杠,则什么也不做

例如:

"/path" => "/path/"

"path/" => "/path/"

"path" => "/path/"

"/path/" => "/path/"

"/" => "/"

"" => "/"
我尝试使用此正则表达式,但它没有添加尾随斜杠:

'/path'.replace(/(^\/?)|(\/?$)/, '/'); // output is "/path"

[感谢Dmitry!]

这将适用于您的前5个案例:

string.replace(/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/, '/$1/');
然后剩下空字符串,您可以使用OR运算符(
|
)处理该字符串:

片段:

var RE=/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/;
log('/path'.replace(RE'/$1/')| |'/');
log('path/'.replace(RE,'/$1/'))| |'/');
log('path'.replace(RE,'/$1/'))| |'/');
console.log(“/path/”.replace(RE“/$1/”)| |“/”);
console.log(“/”.replace(RE“/$1/”)| |“/”);
console.log(“”.replace(RE,“/$1/”)| |“/”);

log('path/with/embedded/slashes.replace(RE,“/$1/”)| |“/”)[感谢Dmitry!]

这将适用于您的前5个案例:

string.replace(/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/, '/$1/');
然后剩下空字符串,您可以使用OR运算符(
|
)处理该字符串:

片段:

var RE=/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/;
log('/path'.replace(RE'/$1/')| |'/');
log('path/'.replace(RE,'/$1/'))| |'/');
log('path'.replace(RE,'/$1/'))| |'/');
console.log(“/path/”.replace(RE“/$1/”)| |“/”);
console.log(“/”.replace(RE“/$1/”)| |“/”);
console.log(“”.replace(RE,“/$1/”)| |“/”);

log('path/with/embedded/slashes.replace(RE,“/$1/”)| |“/”)也许,<代码>路径<代码>在中间也应该有可选的斜线。在这种情况下(例如,
some/longer/path
),建议的解决方案将失败。这是一个很好的观点。如果情况是这样,OP必须做出响应。然而,你的解决方案可以扩展到覆盖这些情况。现在,我的解决方案是:
“路径”。替换(/^\/?([^\/]+)\/?$/,“/$1/”)。它将为空的单斜杠输入字符串返回双斜杠。这种情况可以通过简单的条件解决。但是有一点hacky@DmitryEgorov太棒了。现在更新了,但是如果你想把它贴在信用卡上,我会删除我的答案。也许,<代码>路径<代码>在中间也应该有可选的斜线。在这种情况下(例如,
some/longer/path
),建议的解决方案将失败。这是一个很好的观点。如果情况是这样,OP必须做出响应。然而,你的解决方案可以扩展到覆盖这些情况。现在,我的解决方案是:
“路径”。替换(/^\/?([^\/]+)\/?$/,“/$1/”)。它将为空的单斜杠输入字符串返回双斜杠。这种情况可以通过简单的条件解决。但是有一点hacky@DmitryEgorov太棒了。现在已经更新了,但是如果你想自己发布,我会删除我的答案。看看。看看。