2017-05-07 77 views
0

我遇到了一個問題,如果它沒有它們,我需要將字符串添加到前導和尾部,或者如果字符串已經存在,則不執行任何操作。如果需要使用正則表達式添加前導斜槓和尾部斜槓

例如:

"/path" => "/path/" 

"path/" => "/path/" 

"path" => "/path/" 

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

"/" => "/" 

"" => "/" 

我試圖用這個正則表達式,但它不添加斜線:[!與感謝梅德]

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

看一看在[這個演示](https://jsfiddle.net/d262512n/)。 –

回答

4

這將適用於您的前5種情況:

string.replace(/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/, '/$1/'); 

然後,您就只剩下空字符串,它可以處理使用OR運算符(||):

string.replace(/^\/?([^\/]+(?:\/[^\/]+)*)\/?$/, '/$1/') || '/'; 

段:

var RE = /^\/?([^\/]+(?:\/[^\/]+)*)\/?$/; 
 

 
console.log('/path'.replace(RE, '/$1/') || '/'); 
 
console.log('path/'.replace(RE, '/$1/') || '/'); 
 
console.log('path'.replace(RE, '/$1/') || '/'); 
 
console.log('/path/'.replace(RE, '/$1/') || '/'); 
 
console.log('/'.replace(RE, '/$1/') || '/'); 
 
console.log(''.replace(RE, '/$1/') || '/'); 
 
console.log('path/with/embedded/slashes'.replace(RE, '/$1/') || '/');

+0

也許,'路徑'應該在中間也有可選的斜線。在這種情況下(例如'some/longer/path'),建議的解決方案會失敗。 –

+0

這是一個很好的觀點。如果是這樣的話,OP將不得不作出迴應。 –

+1

然而,您的解決方案可能會擴展到['^ \ /?([^ \ /] +(?:\/[^ \ /] +)*)\ /?$'](https://regex101.com/r/SWd8IS/2)以涵蓋此類情況。 –