2012-06-01 3 views
2

Considérez cette chaîne,JavaScript: Utilisation regex pour extraire les caractères entre autres caractères

var string = "sometext/#a=some_text/#b=25/moretext"; 

Ce que je voudrais faire est d'extraire les valeurs de « a » et « b » (« some_text » et 25)

Donc, essentiellement ce que je veux faire est de trouver "#a=" et saisir tout ce qui précède /, puis faire la même chose pour b.
Quelqu'un peut-il me dire comment cela peut être accompli? De plus, est-ce que j'utiliserais la même expression pour changer les valeurs dans la chaîne?

J'ai une main à faire avec PHP, mais maintenant je ne peux pas comprendre pour JavaScript. Si quelqu'un peut me prêter main forte, je l'apprécierais, merci. Je vous remercie.

EDIT: Voici la version PHP de l'extraction.

$string = "sometext/#a=some_text/#b=25/moretext"; 

$expr = '@#([a-z]+)=(.+?)/@'; 
$count = preg_match_all($expr, $string, $matches); 

$result = array(); 
for ($i = 0; $i < $count; $i++) { 
    $result[$matches[1][$i]] = $matches[2][$i]; 
} 

print_r($result[b]); 

(sortie serait "some_text")

+0

Qu'avez-vous fait en PHP? Peut-être que nous pouvons vous montrer comment utiliser la même approche dans JS. – Bergi

+0

k édité le poste avec lui, merci – Ian

Répondre

2

Si vous cherchez à extraire toutes les valeurs et les stocker dans un dictionnaire en tant que paires nom/valeur, vous pouvez utiliser ceci:

var regexp = /#(.*?)=(.*?)\//g; 
var string = "sometext/#a=some_text/#b=25/moretext"; 
var match; 

var result = {}; 

while ((match = regexp.exec(string)) != null) { 
    result[match[1]] = match[2]; 
} 

alert(JSON.stringify(result)); 
+0

Exactement ce que je cherchais, merci. – Ian

3
var x = "sometext/#a=some_text/#b=25/moretext".match(/#a=(.+)\/.*#b=(.*).*\//) 
var matches = [x[1], x[2]]; 

Live DEMO

+0

+1 excellent copain – thecodeparadox

+0

Merci, c'est utile mais pas tout à fait ce que je cherchais, puisque la chaîne peut changer à tout moment je dois être en mesure de l'attraper en fonction de la Nom de variable. Dites "a" a été retiré de la chaîne, j'ai besoin d'un moyen d'essayer et d'appeler "a" pour voir si elle existe. Sinon, x [1] tirerait "b" et x [2] n'existerait pas. Corrigez-moi si je me trompe bien. – Ian

+0

@lan, Donnez-moi des exemples de chaînes. Je pense que devrait fonctionner avec n'importe quelle piqûre dans ce format. Il suffit de jouer avec la DEMO pour voir si cela fonctionne avec toutes les chaînes que vous pouvez obtenir. Je pense que ça devrait. – gdoron

0

Pour modifier la valeur de la chaîne

var string = "sometext/#a=some_text/#b=25/moretext"; 

Regex.Replace(string,"(#a=).(/)",,"$1New Text$2"); 
1

Sur la base des informations limitées (vous n'avez pas spécifié quels caractères peuvent apparaître entre # et =), voici ce que je pense que vous cherchez:

var string = "sometext/#a=some_text/#b=25/moretext", 
    regex = /#([^=]+)=([^\/]+)/g, 
    matches = [], 
    match; 
while (match = regex.exec(string)) { 
    matches.push(match[2]); 
} 
// matches -> ["some_text", "25"] 

Si vous souhaitez modifier les valeurs de la chaîne, vous pouvez le faire avec le même regex comme avant:

string = string.replace(regex, "#$1=new_value"); 
// -> "sometext/#a=new_value/#b=new_value/moretext" 
Questions connexes