7
votes

Une expression régulière plus simple à analyser les cordes citées

La question est simple. J'ai une chaîne contenant plusieurs éléments intégrés aux guillemets unique: xxx

et je veux analyser pour que j'ai tous ces noms dans un tableau: < Pré> xxx

J'utilise actuellement ce code pour faire le travail: xxx

mais cette expression régulière est trop longue et elle n'est pas flexible, alors Si j'ai plus d'éléments dans la chaîne STR , je dois éditer l'expression régulière.

Quel est le moyen le plus rapide et le plus efficace de faire cette analyse? La performance et la félicité sont importantes dans notre application Web.

J'ai examiné la question suivante, mais ils ne sont pas ma réponse:


0 commentaires

5 Réponses :


10
votes

Définissez le motif une fois et utilisez le drapeau global g g . xxx

Si vous voulez les jetons sans les citations simples qui leur entouraient, l'approche normale serait de Utilisez des sous-correspondances dans RegEx - Cependant, JavaScript ne prend pas en charge la capture de sous-groupes lorsque le drapeau g est utilisé. La voie la plus simple (mais pas nécessairement plus efficace) autour de cela serait de les supprimer ensuite, itérativement: xxx

[modifier] - Comme les autres réponses, vous pouvez utiliser < Code> Split () Au lieu de cela, mais seulement si vous pouvez compter sur là étant toujours un espace (ou un délimiteur commun) entre chaque jeton de votre chaîne.


0 commentaires

0
votes

Un moyen; xxx


0 commentaires

1
votes

Lorsqu'un objet REGEX a le jeu d'indicateur code> code> global, vous pouvez l'exécuter plusieurs fois sur une chaîne pour trouver tous les matchs. Il fonctionne en démarrant la prochaine recherche après le dernier caractère correspondant dans la dernière exécution:

var buf = "'abc' 'def' 'ghi'";
var exp = /'(.*?)'/g;
for(var match=exp.exec(buf); match!=null; match=exp.exec(buf)) {
  alert(match[0]);
}


0 commentaires

1
votes

une approche différente

Je suis venu ici avoir besoin d'une approche qui pourrait analyser une chaîne pour les citations et les non-citations, préserver l'ordre des citations et les non-citations, puis la sortie avec des étiquettes spécifiques enroulées autour d'eux pour réagir ou réagir de manière native. J'ai fini par n'utiliser pas les réponses ici parce que je ne savais pas comment les amener à s'adapter à mon besoin, alors cela a fait cela. P>

[
  {
    "type": "text",
    "value": "Testing this "
  },
  {
    "type": "quote",
    "value": "shhhh"
  },
  {
    "type": "text",
    "value": " if it "
  },
  {
    "type": "quote",
    "value": "works!"
  },
  {
    "type": "text",
    "value": " "
  },
  {
    "type": "text",
    "value": "\" hahahah!"
  }
]


0 commentaires

0
votes

Si quelqu'un obtient ici et nécessite une analyse de chaîne plus complexe, avec des guillemets simples ou doubles et la capacité d'échapper à la citation, c'est la regex. Testé dans JS et RUBY.

r = /(['"])((?:\\\1|(?!\1).)*)(\1)|([^'" ]+)/g
console.log(str.match(r).join("\n"))
  'alice'
  ddd
  vvv-12
  'an"na m\'arie'
  "hello ' world"
  "hello \" world"
  'david'
  'muhammad ali'


0 commentaires