2009-11-16 6 views
0

J'ai une page HTML avec une zone de texte. Cette zone de texte a un ID de "myTextBox". J'essaie d'utiliser une expression régulière en JavaScript pour remplacer certaines valeurs dans la zone de texte par une autre valeur. À l'heure actuelle, je suis en train de ce qui suitJavaScript - Expressions régulières

function replaceContent() 
{ 
    var tb = document.getElementById("myTextBox"); 
    if (tb != null) 
    { 
    var current = new String(tb.value); 
    var pattern = new RegExp("(ft.)|(ft)|(foot)", "ig"); 
    current = current.replace(pattern, "'"); 
    alert(current); 
    } 
} 

Sur la base de ce code, si j'avais la valeur « 2ft » dans le myTextBox, j'attends la variable actuel à « 2 ». Cependant, il montre toujours une chaîne vide. Je crains qu'il y ait quelque chose que je suis mal comprendre par rapport aux expressions régulières en JavaScript. Qu'est-ce que je fais mal?

Merci!

+0

Avez-vous une erreur? Cela fonctionne sur ma machine: "2ft" .replace (/ (ft.) | (Ft) | (pied)/ig, "'") –

+0

Avez-vous quelque chose après 2ft dans votre zone de texte? – Skilldrick

Répondre

3

Ressaisissez votre modèle à:

(ft\.?|foot|feet) 

Cela correspondra "ft" ou "ft." et "pied" ou "pieds". Lorsque vous écrivez du code qui utilise des expressions régulières qui ne se comporteront pas, supposer (en premier) que c'est votre expression régulière qui est le problème. Merci à la "programmation" compacte et ésotérique des expressions régulières, il est assez facile de faire une erreur que vous ne voyez pas.

Si vous testez ce qui suit dans Firebug pour obtenir un résultat correct:

"2ft".replace(/(ft\.?|foot|feet)/ig, "'") 

Vous obtiendrez "2'" dans votre console.

Donc, cette réponse devrait résoudre votre problème, si la regex est votre problème en premier lieu. Comme l'a dit Rubens, vérifiez l'ID de votre zone de texte et vérifiez que l'élément est correctement récupéré.

0

Comme le dit The Wicked Flea, le littéral '.' dans votre regex doit être échappé. Si c'est dans une classe de caractères, il peut être écrit non-échappé, mais en dehors d'un, il doit être échappé.

0

Les œuvres suivantes pour moi:

<script> 
var current = "2ft"; 
var pattern = new RegExp("(ft.)|(ft)|(foot)", "ig"); 
current = current.replace(pattern, "'"); 
alert(current); 
</script> 

Etes-vous sûr que tb.value évalue correctement?

0

J'ai exécuté votre code en utilisant IE8, Chrome et FF3 sans problèmes.

Veuillez vérifier si l'identifiant de votre zone de texte est correct.

0

Le problème est que vous alternez des groupements explicites. Au lieu de cela, vous pouvez simplement faire quelque chose comme ce qui suit:

function replaceContent() 
{ 
    var tb = document.getElementById("myTextBox"); 
    if (tb != null) { 
    current = tb.value.replace(/\s*(ft\.|ft|foot|feet)\b/ig, "'"); 
    alert(current); 
    } 
} 

, notez le \ s * qui dépouillera espaces d'attaque et le \ b qui marque le début/fin d'un mot. J'ai aussi ajouté des pieds.