Korzystam z jQuery. Mam ciąg znaków z blokiem znaków specjalnych (początek i koniec). Chcę pobrać tekst z tego bloku znaków specjalnych. Użyłem obiektu wyrażenia regularnego do znalezienia ciągu. Ale jak mogę powiedzieć jQuery, aby znalazł wiele wyników, jeśli mają dwie lub więcej znaków specjalnych?
Mój 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>
i mój kod JavaScript:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
Mój wynik to: [| cơ thử | nghiệm |] thị trường [| test2 | đây là test lần 2 |] chứng khoán [| Mỹ | day la nuoc my |] . Ale to nie jest wynik, który chcę :(. Jak zdobyć [tekst] dla czasów 1 i [demo] dla czasów 2?
Właśnie skończyłem pracę po wyszukaniu informacji w Internecie ^^. Tworzę kod w ten sposób:
var filterdata = takedata.match(/(\[.*?\])/g);
- mój wynik to: [| cơ thử | nghiệm |], [| test2 | đây là test w 2 |] to prawda !. ale tak naprawdę tego nie rozumiem. Czy możesz mi odpowiedzieć dlaczego?
?
w sobie oznacza „jeden lub zero” (ale jest chciwy!). Np.'bb'.replace(/b?/, 'a') //'ab'
I'bb'.replace(/c?/, 'a') //'abb'
c
nie pasuje, ale ty masz?
, to znaczy0 or 1
, że będzie pasować0 number of c characters
, a więc zastąpi go. Nie mam jednak pojęcia, jak to działa, ponieważ nie można go skompilować w żadnym silniku regularnym, który wypróbowałem 😢Masz rację, że chciwość jest problemem:
Jeśli chcesz dopasować oba
A--Z
, musisz użyćA.*?Z
(?
sprawia, że*
„niechętny” lub leniwy).Są jednak czasem lepsze sposoby na to, np
Wykorzystuje zanegowaną klasę znaków i kwantyfikator dzierżawczy w celu ograniczenia cofania i prawdopodobnie będzie bardziej wydajny.
W twoim przypadku regex byłby:
Niestety, wyrażenia regularne JavaScript nie obsługują kwantyfikatora dzierżawczego, więc musisz po prostu zrobić z:
Zobacz też
Szybkie podsumowanie
Zauważ, że kwantyfikatory niechętne i dzierżawcze mają również zastosowanie do
{n,m}
konstrukcji o powtarzalnych ograniczeniach .Przykłady w Javie:
źródło
+
zamiast dwóch.you can emulate atomic grouping with LookAhead. (?>a) becomes (?=(a))\1
Wierzę, że tak by było
g
na końcu oznacza globalne, więc nie kończy się na pierwszym meczu.źródło