Vous n'avez pas spécifié quelle sorte de regex vous utilisez, mais cela fonctionnera dans n'importe laquelle des plus populaires qui peuvent être considérées comme "complètes".
/.+?(?=abc)/
Comment cela fonctionne
Le site .+?
est la version non gourmande de .+
(un ou plusieurs de n'importe quoi). Lorsque nous utilisons .+
le moteur va essentiellement tout faire correspondre. Ensuite, s'il y a quelque chose d'autre dans la regex, il reviendra en arrière par étapes en essayant de faire correspondre la partie suivante. C'est le gourmand comportement, signification dans la mesure du possible, pour satisfaire .
Lorsque vous utilisez .+?
Au lieu de faire correspondre tous les caractères d'un coup et de revenir en arrière pour d'autres conditions (le cas échéant), le moteur fera correspondre les caractères suivants par jusqu'à ce que la partie suivante de la regex soit trouvée (encore une fois, s'il y en a). C'est le non avare , ce qui veut dire que la correspondance le moins possible pour satisfaire .
/.+X/ ~ "abcXabcXabcX" /.+/ ~ "abcXabcXabcX"
^^^^^^^^^^^^ ^^^^^^^^^^^^
/.+?X/ ~ "abcXabcXabcX" /.+?/ ~ "abcXabcXabcX"
^^^^ ^
En suivant cela, nous avons (?=
{contents}
)
, a largeur zéro assertion , a regardez autour de vous . Cette construction groupée correspond à son mais ne compte pas les caractères correspondants ( largeur zéro ). Il s'agit de renvoie seulement s'il s'agit d'une correspondance ou non ( assertion ).
Ainsi, en d'autres termes, la regex /.+?(?=abc)/
signifie :
Faites correspondre le moins de caractères possible jusqu'à ce qu'un "abc" soit trouvé, sans compter les "abc".
0 votes
Que voulez-vous dire par
match but not including
?9 votes
Je veux dire que je veux correspondre
"qwerty qwerty whatever "
- sans compter les "abc". En d'autres termes, je Ne le fais pas. voulez que la correspondance résultante soit"qwerty qwerty whatever abc"
.4 votes
En javascript, vous pouvez simplement
do string.split('abc')[0]
. Ce n'est certainement pas une réponse officielle à ce problème, mais je trouve que c'est plus simple que les regex.