J'utilise jQuery. J'ai une chaîne avec un bloc de caractères spéciaux (début et fin). Je veux récupérer le texte de ce bloc de caractères spéciaux. J'ai utilisé un objet d'expression régulière pour la recherche dans la chaîne. Mais comment puis-je dire à jQuery de trouver plusieurs résultats lorsque vous avez deux caractères spéciaux ou plus?
Mon 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>
et mon code JavaScript:
$(document).ready(function() {
var takedata = $("#textcontainer").text();
var test = 'abcd adddb';
var filterdata = takedata.match(/(\[.+\])/);
alert(filterdata);
//end write js
});
Mon résultat est: [| cơ thử | nghiệm |] thị trường [| test2 | đây là test lần 2 |] chứng khoán [| Mỹ | jour la nuoc my |] . Mais ce n'est pas le résultat que je veux :(. Comment obtenir [texte] pour les temps 1 et [démo] pour les temps 2?
Je viens de faire mon travail après avoir cherché des informations sur internet ^^. Je fais du code comme ça:
var filterdata = takedata.match(/(\[.*?\])/g);
- mon résultat est: [| cơ thử | nghiệm |], [| test2 | đây là test lần 2 |] c'est vrai !. mais je ne comprends pas vraiment cela. Pouvez-vous me répondre pourquoi?
?
signifie à lui seul «un ou zéro» (mais est gourmand!). Par exemple'bb'.replace(/b?/, 'a') //'ab'
et'bb'.replace(/c?/, 'a') //'abb'
c
ne correspondra pas, mais vous avez le?
, ce qui est0 or 1
, alors il va correspondre0 number of c characters
, donc le remplacer. Je ne sais pas comment cela fonctionne, car cela ne se compile dans aucun moteur regex que j'ai essayé 😢Vous avez raison de dire que la cupidité est un problème:
Si vous voulez faire correspondre les deux
A--Z
, vous devrez utiliserA.*?Z
(le?
rend le*
"réticent", ou paresseux).Il existe parfois de meilleures façons de le faire, par exemple,
Cela utilise une classe de caractères nié et un quantificateur possessif, pour réduire le retour en arrière, et est probablement plus efficace.
Dans votre cas, l'expression régulière serait:
Malheureusement, regex Javascript ne prend pas en charge les quantificateurs possessifs, vous n'avez donc qu'à faire avec:
Voir également
Résumé rapide
Notez que les quantificateurs réticents et possessifs sont également applicables aux
{n,m}
constructions à répétition finie .Exemples en Java:
la source
+
au lieu de deux.you can emulate atomic grouping with LookAhead. (?>a) becomes (?=(a))\1
Je crois que ce serait comme ça
le
g
à la fin signifie global, donc il ne s'arrête pas au premier match.la source