[javascript] / \ s / g와 / \ s + / g 사이에 차이가 있습니까?
공백 문자가 포함 된 문자열이있는 경우 :
var str = ' A B C D EF ';
그리고 우리는 문자열에서 공백을 제거하려고합니다 (이것을 원합니다 🙂 'ABCDEF'
.
둘 다 :
str.replace(/\s/g, '')
이:
str.replace(/\s+/g, '')
올바른 결과를 반환합니다.
이것은이 +
상황에서 불필요 하다는 것을 의미합니까 ? 이 상황에서이 두 정규식간에 차이가 있습니까 (예 : 어떤 식 으로든 다른 결과를 생성 할 수 있음)?
업데이트 : 성능 비교- /\s+/g
더 빠릅니다. 여기를 참조하십시오 : http://jsperf.com/s-vs-s
답변
첫 번째 정규식에서 각 공백 문자 는 한 문자 씩 빈 문자열로 대체됩니다.
두 번째 정규식에서 각 연속 공백 문자 문자열은 +
.
그러나 0에 다른 것을 곱한 것과 마찬가지로 두 방법 모두 정확히 같은 방식으로 공백을 제거하는 것처럼 보입니다.
대체 문자열을로 변경하면 '#'
차이가 훨씬 더 명확 해집니다.
var str = ' A B C D EF ';
console.log(str.replace(/\s/g, '#')); // ##A#B##C###D#EF#
console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#
답변
\s
“하나의 공백”을 \s+
의미하고 “하나 이상의 공백”을 의미합니다.
그러나 /g
플래그 (모든 항목 교체)를 사용하고 빈 문자열로 교체하기 때문에 두 표현식은 동일한 효과를 갖습니다.
답변
일치 상황에서 첫 번째는 공백 당 하나의 일치를 반환하고 두 번째는 각 공백 그룹에 대한 일치를 반환합니다.
빈 문자열로 바꾸므로 결과는 동일합니다. 예를 들어 ‘x’로 바꾸면 결과가 달라집니다.
str.replace(/\s/g, '')
‘xxAxBxxCxxxDxEF’를 반환합니다.
동안 str.replace(/\s+/g, '')
‘xAxBxCxDxEF’를 반환합니다.
때문에 \s
‘X’와 각각 일치하는 각 교체 공백, 및 \s+
하나의 ‘X’여러 순차 공백 교체 공백의 일치 그룹.
답변
+
“하나 이상의 문자”를 의미하고 플러스가 없으면 “한 문자”를 의미합니다. 귀하의 경우에는 둘 다 동일한 결과를 얻습니다.