2009-11-09 3 views
1

J'essaie de comprendre comment diviser une chaîne en termes interrogeables. J'ai besoin pourDivision d'une chaîne de recherche citée avec des expressions régulières

  • divisés sur les espaces et les guillemets simples (en ignorant le caractère unique, les résultats non cotés)
  • retour cité des phrases sans les guillemets

Donc, si je fais une demande à: "phrase cité" mots simples Il retournerait

  • cité phrase
  • unique
  • mots

Voici ce que j'ai jusqu'à présent (en Javascript), mais je dois avoir à dépouiller les citations séparément.

var searchArray = temp.match(/"[^"]*"|[^\s']{2,}/g); 
for (index in searchArray) 
    searchArray[index] = searchArray[index].replace(/"/g, ''); 

Existe-t-il un moyen de le faire en utilisant une seule expression régulière?

+0

Tenir compte de ce texte d'entrée: ' « guillemets doubles » « mixtes « quotes » ici » 'apostrophes de « ' « autre » way'' En outre, ce faites-vous si le "caractère unique" à ignorer est une citation? –

+0

Eh bien, je ne m'intéresserais pas aux guillemets simples, mais je voulais que les résultats ne soient pas possessifs. Pour le bien de cette discussion, nous pouvons ignorer les guillemets simples. – Joe

Répondre

3

Cela semble fonctionner mais je ne suis pas sûr d'avoir couvert tous les cas. Je ne suis pas sûr que ça marchera dans IE 5, mais cela ne vous inquiète peut-être pas; cela fonctionne dans IE 6 et tous les autres navigateurs que j'ai essayés. Il déshabille aussi les espaces avant et des matches entre guillemets:

var regex = /("?)\s*\b(\S[^\1]*?)\b\s*\1/g; 
var str = '"quoted phrase " single "quoted" words " yes "'; 
var res; 

while ((res = regex.exec(str))) { 
    alert(res[2]); 
} 
+0

On dirait que ça va faire ce que je cherchais. Merci beaucoup! Je voudrais marquer votre réponse comme utile, mais je n'ai pas encore assez de réputation. – Joe

Questions connexes