J'ai certaines expressions qui ressemblent à ça

"sum='29'"

'The total score =" 29"'

"Your name = 'John'"

"Your grade is A"

Maintenant, ce que je veux faire est de vérifier si le côté gauche de la citation (' ou ") contient un =.

Voilà donc ce que je fais

leftTermOfQuote = string.match(/\S+(?' *')/)[0]

Mais j'obtiens null. Qu'est-ce que je fais mal?

1
Souvik Ray 3 juin 2020 à 15:43

3 réponses

Meilleure réponse

Pour obtenir le côté gauche d'un ' ou ", vous pouvez capturer la première partie d'un groupe tout en faisant correspondre la première ' ou "

Pour ne pas franchir les guillemets ou la limite =, vous pouvez utiliser une classe de caractères annulés [^'"\r\n=] correspondant à n'importe quel caractère sauf celui indiqué.

^([^'"\r\n=]*=[^'"\r\n=]*)['"]

Explication

  • ^ Début de chaîne
  • ( Groupe de capture 1
    • [^'"\r\n=]* Correspond à n'importe quel caractère sauf les guillemets, le signe égal ou la nouvelle ligne
    • = Faire correspondre le signe égal
    • [^'"\r\n=]* Identique à la classe de caractères précédente
  • ) Fermer le groupe
  • ['"] Faire correspondre un ' ou "

Démo Regex

[
  `sum='29'`,
  `The total score =" 29"`,
  `Your name = 'John'`,
  `Your grade is A`
].forEach(s => {
  let res = s.match(/^([^'"\r\n=]*=[^'"\r\n=]*)['"]/);
  if (res) {
    console.log(res[1]);
  }
})
2
The fourth bird 3 juin 2020 à 12:59

Maintenant, ce que je veux faire est de vérifier si le côté gauche de la citation ('ou ") contient un =.

Vous pouvez le faire en recherchant =.*['"]. Mais cela trouverait également The result is 'A=B' car =B' correspond aux exigences.

Ainsi, vous pouvez ancrer l'expression régulière au premier caractère et demander qu'avant le premier guillemet, il y ait un signe égal:

^[^'"]*=[^'"]*['"]

Cela se lit comme suit: "depuis le début de la chaîne ^, il peut y avoir des non-guillemets [^ '"], dans n'importe quel nombre *, avant un signe égal =, suivi d'un nombre quelconque de non-guillemets, finalement suivi d'un guillemet "

Vous pouvez également analyser l'ensemble de l'affectation:

^([^=]*)\\s*=\\s*"\\s*(.*)\\s*"

Cela extraira également les parties entre parenthèses de l'affectation, vous donnant un tableau avec ce qui se trouve à gauche du signe égal, et ce qui se trouve à droite entre les guillemets. Il devrait également supprimer les espaces, donc

'  The total score     =   "  29"  '

Est analysé en

[ "The total score", "29" ]
1
LSerni 3 juin 2020 à 14:09

Vous pouvez utiliser le split et comprend également des fonctions:

const word = 'The total score =" 29"';
const wordSplitByQuotes = word.split(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/);
const containsEqualSign = wordSplitByQuotes[0].includes('=');
0
Berk Kurkcuoglu 3 juin 2020 à 13:12