Program Tip

''로 문장을 분할하고 주변 공백을 제거합니다.

programtip 2020. 11. 29. 12:09
반응형

''로 문장을 분할하고 주변 공백을 제거합니다.


이 코드가 있습니다.

var r = /(?:^\s*([^\s]*)\s*)(?:,\s*([^\s]*)\s*){0,}$/
var s = "   a   ,  b  , c "
var m = s.match(r)
m => ["   a   ,  b  , c ", "a", "c"]

전체 문자열이 일치하는 것 같지만 어디로 "b"갔습니까? 차라리 얻을 것으로 기대합니다.

["   a   ,  b  , c ", "a", "b", "c"]

그래서 나는 m.shift()같은 결과로 할 수 s.split(',')있지만 공백을 제거했습니다.

정규 표현식에 실수가 있거나 오해가 String.prototype.match있습니까?


복잡한 정규식을 사용하지 않고도이 작업을 수행하는 매우 간단하고 직접적인 방법이 있습니다.

var str = "   a   ,  b  , c "
var arr = str.split(",").map(function(item) {
  return item.trim();
});
//arr = ["a", "b", "c"]

네이티브 .map는 IE9 이상에서 지원됩니다 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map


또는 ES6 +에서는 더 짧아집니다.

var arr = str.split(",").map(item => item.trim());

완료를 위해 여기에 타이핑 정보가있는 Typescript에 있습니다.

var arr: string[] = str.split(",").map((item: string) => item.trim());

짧은 대답 : 사용 m = s.match(/[^ ,]/g);


마지막 그룹이 가장 최근 일치 (= c) 와 일치하기 때문에 RE가 예상대로 작동하지 않습니다 . 생략 {1,}$하면 반환 된 일치 항목은입니다 " a , b ", "a", "b". 간단히 말해, RegExp는 flag 를 사용 하지 않는 한 지정된 그룹만큼 일치를 반환합니다 . 이 경우 반환 된 목록은 일치하는 모든 하위 문자열에 대한 참조를 보유합니다. global/g

효과를 얻으려면 다음을 사용하십시오.

m = s.replace(/\s*(,|^|$)\s*/g, "$1");

이렇게 하면 공백으로 둘러싸인 모든 쉼표 ( ,), 시작 ( ^) 및 끝 ( $)이 원래 문자 ( ) 로 대체됩니다 comma.

배열을 얻으려면 다음을 사용하십시오.

m = s.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/);

이 RE는 그때까지 문자열을 분할, 문자열 (시작과 끝의 공백을 제거 트림 <any whitespace>,<any whitespace>. 공백 문자는 줄 바꿈과 탭을 포함합니다. 당신이에 충실하려면 공간 전용 공간 (사용 ) 대신 \s.


복잡한 정규식없이 이것을 시도 할 수 있습니다.

var arr = "   a   ,  b  , c ".trim().split(/\s*,\s*/);
console.log(arr);


당신은 당신의 목적을 위해 이것을 할 수 있습니다
편집 : 주석에 제안 된대로 두 번째 교체 제거. s.replace(/^\s*|\s*$/g,'').split(/\s*,\s*/)
먼저 replace문자열을 트리밍 한 다음 split함수가 '\s*,\s*'. 이것은 ["a", "b", "c"]입력에 출력 제공합니다" a , b , c "

정규식이 'b'를 캡처하지 않는 이유는 캡처 된 그룹을 반복하므로 마지막 발생 만 캡처됩니다. 자세한 내용은 여기 http://www.regular-expressions.info/captureall.html


그래서 마지막으로 내가 /(?=\S)[^,]+?(?=\s*(,|$))/g필요한 것을 정확히 제공하는를 사용했습니다. 모든 문장은 주변 공백없이 ','로 분할되었습니다.

'       a,    OMG     abc b a b, d o WTF        foo     '.
  match( /(?=\S)[^,]+?(?=\s*(,|$))/g )
=> ["a", "OMG     abc b a b", "d o WTF        foo"]

많은 감사합니다!

참고 URL : https://stackoverflow.com/questions/7695997/split-the-sentences-by-and-remove-surrounding-spaces

반응형