jQuery를 사용하고 있습니다. 특수 문자 (시작과 끝) 블록이있는 문자열이 있습니다. 해당 특수 문자 블록에서 텍스트를 가져오고 싶습니다. 문자열 내 찾기에 정규식 객체를 사용했습니다. 그러나 두 개의 특수 문자 이상이있을 때 여러 결과를 찾도록 jQuery에 어떻게 말할 수 있습니까?
내 HTML :
<div id="container">
<div id="textcontainer">
Cuộc chiến pháp lý giữa [|cơ thử|nghiệm|] thị trường [|test2|đây là test lần 2|] chứng khoán [|Mỹ|day la nuoc my|] và ngân hàng đầu tư quyền lực nhất Phố Wall mới chỉ bắt đầu.
</div>
</div>
내 JavaScript 코드 :
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
내 결과는 다음과 같습니다. [| cơ thử | nghiệm |] thờ trường [| test2 | đây là test lần 2 |] chứng khoán [| Mỹ | day la nuoc my |] . 그러나 이것은 내가 원하는 결과가 아닙니다.
인터넷에서 정보를 검색 한 후 방금 작업했습니다 ^^. 나는 다음과 같은 코드를 만든다 :
var filterdata = takedata.match(/(\[.*?\])/g);
- 내 결과는 : [| cơ thử | nghiệm |], [| test2 | đây là test lần 2 |]
맞습니다!. 그러나 나는 이것을 정말로 이해하지 못한다. 왜 그런지 대답 할 수 있습니까?
답변
욕심없는 정규 표현식 수정자는 욕심 많은 대응 자와 비슷하지만 ?
즉시 따라옵니다.
* - zero or more
*? - zero or more (non-greedy)
+ - one or more
+? - one or more (non-greedy)
? - zero or one
?? - zero or one (non-greedy)
답변
당신은 욕심이 문제라는 것이 옳습니다.
--A--Z--A--Z--
^^^^^^^^^^
A.*Z
당신이 모두 일치 할 경우 A--Z
, 당신은 사용해야 할 거라고 A.*?Z
합니다 (이 ?
차종 *
“싫어”, 또는 게으른).
그러나 때로는 더 좋은 방법이 있습니다.
A[^Z]*+Z
이것은 부정 문자 클래스와 소유 수량자를 사용하여 역 추적을 줄이고 더 효율적일 수 있습니다.
귀하의 경우 정규식은 다음과 같습니다.
/(\[[^\]]++\])/
불행히도 Javascript 정규식은 소유 수량자를 지원하지 않으므로 다음과 관련이 있습니다.
/(\[[^\]]+\])/
또한보십시오
빠른 요약
* Zero or more, greedy
*? Zero or more, reluctant
*+ Zero or more, possessive
+ One or more, greedy
+? One or more, reluctant
++ One or more, possessive
? Zero or one, greedy
?? Zero or one, reluctant
?+ Zero or one, possessive
주저하고 소유 한 정량자는 유한 반복 {n,m}
구성 에도 적용 할 수 있습니다.
자바 예제 :
System.out.println("aAoZbAoZc".replaceAll("A.*Z", "!")); // prints "a!c"
System.out.println("aAoZbAoZc".replaceAll("A.*?Z", "!")); // prints "a!b!c"
System.out.println("xxxxxx".replaceAll("x{3,5}", "Y")); // prints "Yx"
System.out.println("xxxxxx".replaceAll("x{3,5}?", "Y")); // prints "YY"
답변
나는 이것이 이렇게 될 것이라고 믿습니다.
takedata.match(/(\[.+\])/g);
g
는 첫 경기에서 중지되지 않도록 끝은 글로벌을 의미합니다.