javascript - 특수문자 - 자바스크립트 split 배열




문자열을 분할하고 구분 기호를 유지하십시오. (2)

분리 대신에 exec를 사용하여 분리 된 요소를 얻을 수 있습니다.

var str = 'abc<img src="jkhjhk" />d';
var myRe = /<img[^>]*>|[a-z]/gi;
var match;
var res= new Array();

while ((match = myRe.exec(str)) !== null) {
    res.push(match[0]);
}
console.log(res);

크롬 확장을 쓰고 있는데, 텍스트와 img 태그 만 포함 된 문자열을 분할해야하므로 배열의 모든 요소가 문자 또는 img 태그가됩니다. 예 : "a", "b", "c", "<img.../>", "d" str.split(/(<img.*?>|)/) 그러나 결과 배열의 일부 요소는 비어 있습니다 (이유를 모르겠습니다). 다른 적합한 정규 표현식이 있습니까?

당신의 도움을 주셔서 대단히 감사합니다.


빈 요소를 얻는 이유는 <img...> 결과를 얻는 것과 같습니다. split 패턴에서 캡처 링 괄호를 사용하면 결과에 구분 기호가있는 위치의 캡처가 포함됩니다. (<img.*?>|) 했기 때문에 두 번째 대안이 사용되면 빈 문자열을 일치시킵니다 (캡처합니다). 불행하게도 (<img.*?>)| 혼자도 도움이되지 않습니다. 왜냐하면 빈 문자열 대신에 undefined 문자열을 얻게되기 때문입니다. 그러나 쉽게 filter 할 수 있습니다.

str.split(/(<img[^>]*>)|/).filter(function(el) { return el !== undefined; });

그래도 문자열의 시작과 끝은 물론 인접한 <img> 태그 사이에서도 빈 요소를 얻을 수 있습니다. 따라서 <img><img> 분할하면

["", "<img>", "", "<img>", ""]

원하지 않으면 필터 기능이 더욱 단순 해집니다.

str.split(/(<img[^>]*>)|/).filter(function(el) { return el; });






split