[javascript] 자바 스크립트 정규식 : 첫 번째 및 마지막 슬래시 제거

나는 자바 스크립트에 다음 문자열이 있습니다.

/banking/bonifici/italia
/banking/bonifici/italia/

첫 번째와 마지막 슬래시가 있으면 제거하고 싶습니다.

시도 ^\/(.+)\/?$했지만 작동하지 않습니다.

stackoverflow의 일부 게시물을 읽으면 php에 트림 기능이 있고 그의 javascript 번역 ( http://phpjs.org/functions/trim : 566)을 사용할 수 있지만 “간단한”정규식을 선호합니다.



답변

return theString.replace(/^\/|\/$/g, '');

“모든 ( /.../g) 선행 슬래시 ( ^\/) 또는 ( |) 후행 슬래시 ( \/$)를 빈 문자열로 바꿉니다 .”


답변

여기서 정규식을 사용할 실제 이유는 없습니다. 문자열 함수는 잘 작동합니다.

var string = "/banking/bonifici/italia/";
if (string.charAt(0) == "/") string = string.substr(1);
if (string.charAt(string.length - 1) == "/") string = string.substr(0, string.length - 1);
// string => "banking/bonifici/italia"

jsFiddle 에서 이것을 확인하십시오 .

참조 :


답변

RegExp를 사용 하는 것이 옵션아니 거나 URL (예 : 이중 / 삼중 슬래시 또는 복잡한 대체가없는 빈 줄)로 작업하는 동안 코너 케이스를 처리해야하는 경우 또는 추가 처리를 활용하는 경우에는 덜 분명하지만 더 기능적인 방법이 있습니다. 스타일 솔루션 :

const urls = [
  '//some/link///to/the/resource/',
  '/root',
  '/something/else',
];

const trimmedUrls = urls.map(url => url.split('/').filter(x => x).join('/'));

console.log(trimmedUrls);

이 스 니펫에서 filter()함수는 빈 문자열을 필터링하는 것보다 더 복잡한 로직을 구현할 수 있습니다 (기본 동작).

경고의 말씀-이것은 여기에있는 다른 스 니펫만큼 빠르지 않습니다.


답변

누군가 여기 에서 조기 최적화 가 필요한 경우를 대비하여 …

http://jsperf.com/remove-leading-and-trailing-slashes/5

var path = '///foo/is/not/equal/to/bar///'
var count = path.length - 1
var index = 0

while (path.charCodeAt(index) === 47 && ++index);
while (path.charCodeAt(count) === 47 && --count);

path = path.slice(index, count + 1)


답변