2010-02-06 7 views
3

를 교체 나는 세미콜론 (;)으로 구분 태그의 문자열을 가지고 :자바 스크립트 문자열

"red; yellow; blue; green; purple" 

내가 문자열 일치하지 않는 모든 태그 빼내야 싶습니다 예를 들어

(대소 문자를 구분합니다.) , "BL"하위 문자열이 있으면 "blue"를 반환하고 싶습니다.

자바 스크립트에서 이것을 가장 잘 수행하는 방법에 대한 제안 사항이 있으십니까? 특히, 정규식에서이 작업을 수행하는 한 단계 방법이 있는지 궁금하네요 ...

미리 감사드립니다!

+0

반환 유형은 무엇입니까? 세미콜론으로 구분 된 문자열 또는 배열? –

+0

죄송합니다. 지정해야합니다. 또 다른 세미콜론으로 구분 된 문자열, 감사합니다. – Travis

답변

1

이 같은 것을 사용할 수 있습니다

var needle = 'blu'; 
var s = 'red; yellow; blue; geen; purple'; 
var a = s.split('; '); 
var newArray = new Array(); 
for (var i = 0; i < a.length; i++) { 
    if (a[i].indexOf(needle) != -1) { 
     newArray.push(a[i]); 
    } 
} 
var result = newArray.join('; '); 
alert(result); 

방법은 시몬이 하나 추가 단계로 설명 된 바와 같이 기본적으로는 - join을 마지막에 다시 문자열로 결과를 변환 할 수 있습니다.

재미있게하기 위해, 여기 미친 정규식 기반 솔루션이 있습니다. 경고 : 검색어에 특수 문자가 포함 된 경우 이스케이프 처리해야합니다. 검색 용어에는 특수 문자가 아닌 특수 문자 만 포함될 것이라고 가정합니다.

var s = 'red; yellow; blue; geen; purple'; 
var result = ('; ' + s).replace(/;(?![^;]*blu)[^;]*(?=;|$)/g, '').substring(2); 
alert(result); 
+0

+1 다른 문자열에 일치를 복사 대체 문자열로 함수를 사용하지만 정규 표현식 버전에 나를 이길. –

+0

그건 실제로 미친 정규식입니다. :) 위대한 답변 주셔서 감사합니다! – Travis

+0

정규 표현식을 다음과 같이 단순화 할 수 있다고 생각합니다.'(^ | \ b) \ w * blu \ w * (; | $)' –

2

split()을 사용하여 문자열을 구문 분석 한 다음 배열을 반복하고 배열의 항목에 match 또는 indexOf을 사용하여 일치하는 항목을 찾으십시오. 대소 문자를 구분하지 않으려는 경우 일치하는 대/소문자를 구분하지 않는 정규식을 사용하거나 비교할 모든 요소에 toLowerCase를 사용할 수 있습니다.

+0

Simon에게 감사드립니다. 나는 지금 비슷한 것을하고있다. 나는 정규식에서 그것을 수행하는 한 단계 마술적인 방법이있을 수 있기를 기대하고 있었다고 생각한다. :) – Travis

+0

+1이 기본적으로 구현 한 내용을 설명하기 때문에 +1. –

+0

@travis : 정말 미친 정규식 원 - 라이너를 원한다면, 제 대답을보십시오 - 정규식을 사용하는 메소드를 추가했습니다. ;-) –

0
function find_substring(tags, search){ 
var tags_array = tags.split(";"); 
var found_tags = []; 
for(var i=0; i<tags_array.length; i++){ 
    if(tags_array[i].indexOf(search) > -1){ 
    found_tags.push(tags_array[i]); 
    } 
} 
if(found_tags.length > 0){ 
    return found_tags.join("; "); 
}else{ 
    return false; 
} 
} 

var tags = "red; yellow; blue; geen; purple"; 
var search = "blue"; 
find_substring(tags,search); 
+0

어, 전 for-loop가 태그 요소를 반환하는 것을 원하지 않는다고 생각합니다. 새로운 태그 목록을 만들고 그 태그를 반환하고 싶지 않으십니까? – Pointy

+0

좋은 지적 ... 고정 –