나는 자바 스크립트에 다음 문자열이 있습니다.
/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)