Ich benutze jQuery. Ich habe eine Zeichenfolge mit einem Block von Sonderzeichen (Anfang und Ende). Ich möchte den Text aus diesem Sonderzeichenblock erhalten. Ich habe ein Objekt mit regulären Ausdrücken für die Suche nach Zeichenfolgen verwendet. Aber wie kann ich jQuery anweisen, mehrere Ergebnisse zu finden, wenn zwei oder mehr Sonderzeichen vorhanden sind?
Mein 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>
und mein JavaScript-Code:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
Mein Ergebnis ist: [| cơ thử | nghiệm |] thị trường [| test2 | đây là test lần 2 |] chứng khoán [| Mỹ | day la nuoc my |] . Aber das ist nicht das Ergebnis, das ich will :(. Wie bekomme ich [Text] für Zeit 1 und [Demo] für Zeit 2?
Ich habe gerade meine Arbeit erledigt, nachdem ich Informationen im Internet gesucht habe ^^. Ich mache Code wie folgt:
var filterdata = takedata.match(/(\[.*?\])/g);
- Mein Ergebnis ist: [| cơ thử | nghiệm |], [| test2 | đây là test lần 2 |] das ist richtig!. aber ich verstehe das nicht wirklich. Kannst du mein Warum beantworten?
?
für sich genommen "Eins oder Null" bedeutet (aber gierig ist!). ZB'bb'.replace(/b?/, 'a') //'ab'
und'bb'.replace(/c?/, 'a') //'abb'
c
nicht passt , aber du hast das?
, das heißt0 or 1
, dann wird es passen0 number of c characters
und es somit ersetzen. Ich habe keine Ahnung, wie es funktioniert, da das in keiner Regex-Engine kompiliert wird, die ich ausprobiert habe 😢Sie haben Recht, dass Gier ein Problem ist:
Wenn Sie beide übereinstimmen möchten
A--Z
, müssen Sie verwendenA.*?Z
(das?
macht das*
"widerstrebend" oder faul).Es gibt jedoch manchmal bessere Möglichkeiten, dies zu tun, z
Dies verwendet eine negierte Zeichenklasse und einen besitzergreifenden Quantifizierer, um das Backtracking zu reduzieren, und ist wahrscheinlich effizienter.
In Ihrem Fall wäre der reguläre Ausdruck:
Leider unterstützt Javascript Regex keinen Possessiv-Quantifizierer, sodass Sie nur Folgendes tun müssen:
Siehe auch
Kurze Zusammenfassung
Es ist zu beachten, dass die widerstrebenden und besitzergreifenden Quantifizierer auch auf die
{n,m}
Konstrukte mit endlicher Wiederholung anwendbar sind .Beispiele in Java:
quelle
+
anstelle von zwei verwenden.you can emulate atomic grouping with LookAhead. (?>a) becomes (?=(a))\1
Ich glaube, das wäre so
Das
g
am Ende bedeutet global, also hört es nicht beim ersten Spiel auf.quelle