web-dev-qa-db-fra.com

Correspondance de chaîne d'expression régulière?

J'ai une longue chaîne en javascript comme

var string = 'abc234832748374asdf7943278934haskhjd';

J'essaie de faire correspondre comme

abc234832748374 - c'est-à-dire - j'ai essayé comme

string.match(\abc[^abc]|\def[^def]|) mais cela ne me donne pas les deux chaînes car j'ai besoin de chiffres après eux?

Fondamentalement, j'ai besoin de abc + 8 caractères après et def des 8-11 caractères après? Comment puis-je faire ceci ?

17
Andy

Si vous voulez les chaînes littérales abc ou def suivies de 8-11 chiffres, vous avez besoin de quelque chose comme:

(abc|def)[0-9]{8,11}

Vous pouvez le tester ici: http://www.regular-expressions.info/javascriptexample.html

Sachez que si vous ne souhaitez pas faire correspondre plus à 11 chiffres, vous aurez besoin d'une ancre (ou [^0-9]) à la fin de la chaîne. S'il ne s'agit que de 8 ou plus, vous pouvez remplacer {8,11} avec {8}.

32
paxdiablo

Pour élaborer une réponse déjà publiée, vous avez besoin d'une correspondance globale, comme suit:

var matches = string.match(/(abc|def)\d{8,11}/g);

Cela correspondra à tous les sous-ensembles de la chaîne qui:

  • Commencez par "abc" ou "def". Ceci est la partie "(abc | def)"
  • Sont ensuite suivis de 8 à 11 chiffres. Il s'agit de la partie "\ d {8,11}".\d correspond aux chiffres.

Le drapeau "g" (global) vous donne une liste de toutes les correspondances, plutôt que juste la première.

Dans votre question, vous avez demandé 8-11 caractères plutôt que des chiffres. S'il importe peu qu'il s'agisse de chiffres ou d'autres caractères, vous pouvez utiliser "." au lieu de "\ d".

Je remarque également que chacune de vos correspondances d'exemple ont plus de 11 caractères après "abc" ou "def". Si un nombre quelconque de chiffres suffit, les expressions rationnelles suivantes peuvent être mieux adaptées:

  • N'importe quel nombre de chiffres - var matches = string.match(/(abc|def)\d*/g);
  • Au moins un chiffre - var matches = string.match(/(abc|def)\d+/g);
  • Au moins 8 chiffres - var matches = string.match(/(abc|def)\d{8,}/g);
11
Joe Sarre

Vous pouvez faire correspondre abc[0-9]{8} pour la chaîne abc suivie de 8 chiffres.

Si les trois premiers caractères sont arbitraires et 8 à 11 chiffres après cela, essayez [a-z]{3}[0-9]{8,11}

1
0605002

Utilisez l'expression régulière ci-dessous pour obtenir la correspondance exacte,

string.match(/(abc|def)\d{8,11}/g);

Se termine par g

"g" pour global

"i" pour ignoreCase

"m" pour multiligne

1
premnathcs