[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’여러 순차 공백 교체 공백의 일치 그룹.


답변

+“하나 이상의 문자”를 의미하고 플러스가 없으면 “한 문자”를 의미합니다. 귀하의 경우에는 둘 다 동일한 결과를 얻습니다.


답변