Existe-t-il un moyen de récupérer les positions des caractères (de départ) dans une chaîne des résultats d'une correspondance regex () en Javascript?
javascript
regex
match
string-matching
stagas
la source
la source
re
comme variable et ajouter leg
modificateur sont tous deux cruciaux! Sinon, vous obtiendrez une boucle sans fin.undefined
. jsfiddle.net/6uwn1vof/2 qui n'est pas un exemple de recherche comme le vôtre.g
drapeau et cela fonctionnera. Étant donné quematch
c'est une fonction de la chaîne, pas de l'expression régulière, elle ne peut pas être avec étatexec
, donc elle ne la traite que commeexec
(c'est-à-dire qu'elle a une propriété d'index) si vous ne recherchez pas une correspondance globale ... parce que l'état n'a pas d'importance .Voici ce que j'ai trouvé:
la source
match.index + match[0].length
fonctionne également pour la position finale.match.index + match[0].length - 1
?.slice()
et.substring()
. La fin inclusive serait de 1 de moins comme vous le dites. (Attention, inclusif signifie généralement l'index du dernier caractère à l'intérieur de la correspondance, à moins qu'il ne s'agisse d'une correspondance vide où il est 1 avant la correspondance et pourrait être-1
entièrement en dehors de la chaîne pour une correspondance vide au début ...)À partir de la documentation de developer.mozilla.org sur la
.match()
méthode String :Lorsque vous traitez avec une regex non globale (c'est-à-dire pas de
g
drapeau sur votre regex), la valeur renvoyée par.match()
a uneindex
propriété ... tout ce que vous avez à faire est d'y accéder.Voici un exemple montrant que cela fonctionne également:
J'ai testé cela avec succès depuis IE5.
la source
Vous pouvez utiliser la
search
méthode de l'String
objet. Cela ne fonctionnera que pour le premier match, mais fera autrement ce que vous décrivez. Par exemple:la source
Voici une fonctionnalité intéressante que j'ai découverte récemment, j'ai essayé ceci sur la console et cela semble fonctionner:
Qui a renvoyé: "border 6 bottom 13 left 18 radius"
Donc, cela semble être ce que vous recherchez.
la source
arguments
qui est la position. Pas "le deuxième argument". Les arguments de la fonction sont "correspondance complète, groupe1, groupe2, ...., index de correspondance, chaîne complète mise en correspondance"Dans les navigateurs modernes, vous pouvez accomplir cela avec string.matchAll () .
L'avantage de cette approche
RegExp.exec()
est qu'elle ne repose pas sur le fait que l'expression régulière soit avec état, comme dans la réponse de @ Gumbo .la source
Ce membre fn renvoie un tableau de positions basées sur 0, le cas échéant, du mot d'entrée à l'intérieur de l'objet String
Maintenant essaye
Vous pouvez également saisir des expressions régulières:
Ici, on obtient l'indice de position du terme linéaire.
la source
la source
str.indexOf
ici trouve juste l'occurrence suivante du texte capturé par la correspondance, qui n'est pas nécessairement la correspondance. JS regex prend en charge les conditions sur le texte en dehors de la capture avec anticipation. Par exemplesearchIndex("foobarfoobaz", "foo(?=baz)", true)
devrait donner[6]
, non[0]
.ou
la source