2010-06-12 4 views
5

"ABC 암소가 달에 XYZ를 뛰어 넘었습니다."문자열에 "ABC"와 "XYZ"사이의 부분 문자열을 가져 오려면 jQuery를 사용하고 싶다고합시다 ? 하위 문자열은 "암소가 뛰어"올라야합니다. 많은 감사합니다!jQuery를 사용하여 하위 문자열 찾기

+0

첫째, 당신은 문자열 조작을 할 jQuery를 사용하지 않는 - 즉 자바 스크립트/ECMAScript를합니다. 둘째, 그 문자열을 잡는 데 사용 된 논리에 대해 더 구체적으로 설명 할 수 있습니까? 패턴이 있습니까? –

+0

jQuery로 태그가 지정되지 않은 jQuery에 대한 질문 –

+0

그럼 왜 jQuery가 필요한가요? 당신을 위해 간단한 자바 스크립트를 사용할 수 없습니다. –

답변

6

이것은 주로 DOM 통과 및 조작을위한 jQuery와는 아무런 관련이 없습니다.

var str = "The ABC cow jumped over XYZ the moon"; 
var sub = str.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); 

아이디어는 당신이 당신의 개폐 구분 기호를 일치하는 정규 표현식으로 String.replace를 사용하고, 구분 기호 사이에 일치하는 부분 전체 문자열을 대체하는 것입니다 : 당신은 간단한 정규 표현식을 원한다.

첫 번째 인수는 정규 표현식입니다. 꼬리말 m은 여러 줄에 걸쳐 일치하게합니다. 즉, ABCXYZ 사이의 텍스트에 줄 바꿈이 포함될 수 있습니다. 다음과 같이 나머지는 분해 :

  • ^ 시작 문자열의 시작 부분에
  • .* 0 개 이상의 문자
  • ABC 당신의 개방 구분 기호
  • (.*) 일치하는 0 개 이상의 일련의 시리즈 문자
  • XYZ 닫는 구분 기호
  • .* 일련의 0 또는 문자열

두 번째 매개 변수, 대체 문자열의 끝에 이상의 문자

  • $ 경기는 '$ 1'입니다. replace는 위에 나온 (.*) 부분을 정규 표현식의 괄호 안에 들어간 하위 식으로 대체합니다. 따라서 반환 값은 전체 문자열이며 구분 기호 사이의 부분으로 바뀝니다.

  • +0

    jQuery 함수가 있다고 생각 : substring과 indexof, 그리고 이들을 함께 사용하여 하위 문자열을 가져올 수 있습니다. – Steve

    +0

    어떻게 작동하는지 간단히 설명해 주시겠습니까? str.replace (/^.* ABC (. *) XYZ. * $ /, '$ 1'); – Steve

    +0

    @Steve - 서브 문자열 및 인덱스와 같은 기능을하는 JavaScript입니다. jQuery는 주로 페이지의 DOM을 다룬다. –

    3

    jQuery를 사용할 필요가 없습니다. 나는 이런 식으로 뭔가를 할 거라고 :

    function between(str, left, right) { 
        if(!str || !left || !right) return null; 
        var left_loc = str.indexOf(left); 
        var right_loc = str.indexOf(right); 
        if(left_loc == -1 || right_loc == -1) return null; 
        return str.substring(left_loc + left.length, right_loc); 
    } 
    

    아니오 위의 코드는 버그 무료이지만 아이디어는 표준 substring() 기능을 사용하는 것입니다 보장합니다. 내 경험에 의하면 이러한 유형의 함수는 모든 브라우저에서 동일하게 작동합니다.

    +0

    도움을 주셔서 감사합니다! – Steve

    +0

    내가 정규식이 싫어서이게 맘에 든다. 그게 좋은 이유인지 궁금해. :) – henrijs

    0

    jQuery와 meagar의 정규식을 어떻게 사용하는지 보여 주기만하면됩니다. jQuery를 자바 스크립트이기 때문에, 바보 같은 종류의 소리

    <p id="grabthis">The ABC cow jumped over XYZ the moon</p> 
    

    하면 (다음 jQuery를/자바 스크립트 조합을 사용, 문자열을 잡아하지만, 참조 : 이제 다음 P 태그로 HTML 페이지를 가지고 있다고 가정 해 봅시다 jQuery를) 자바 스크립트 DOM 라이브러리로 :

    $(document).ready(function() { // Wait until the document has been fully loaded 
        var pStr=$("#grabthis").text(); // Grab the text from the P tag and put it into a JS variable 
        var subStr=pStr.replace(/^.*ABC(.*)XYZ.*$/m, '$1'); // Run the regex to grab the middle string 
    
        alert(subStr); // Output the grabbed middle string 
    }); 
    

    또는 짧은 버전 :

    $(document).ready(function() { 
        alert($("#grabthis").text().replace(/^.*ABC(.*)XYZ.*$/m, '$1')); 
    }); 
    

    기능은 자바 스크립트 기능입니다 교체합니다. 나는 이것이 혼란을 없애기를 바란다.

    1

    Meagar, 귀하의 설명은 훌륭하고 명확하게 설명합니다.

    그냥 몇 가지 사소한 질문 :

    • 는 relpace 함수의 두 번째 매개 변수에 submatch을 표시하는 방법으로 만 필요한() 괄호 또는이 또한 submatches을 식별하는 것입니다 :/^. *알파벳. XYZ. $ /이 경우에 우리가하려고하는 것에 대해 작동하지 않습니까?

    • 이 일반 식 (7) submatches가 않습니다...

    ^
    을 *
    ABC
    *
    XYZ
    *
    $

    • 가 있는가 $ 1은 fi를 사용하는 것을 의미합니다. 괄호 안의 서브 밋? 처음에는 시리즈에서 두 번째 서브 매치를 사용하는 것을 의미 할 수도 있다고 생각했습니다 (첫 번째 $ 0 임).

    감사합니다,

    스티브 모든

    관련 문제