2009-06-16 6 views
0

Si j'ai une chaîne entre deux crochets que j'ai créée sur une page, comment pourrais-je stocker cette valeur dans une variable et supprimer les crochets?Comment extraire une chaîne à partir de caractères personnalisés en utilisant JavaScript?

Exemple

[String I want] 

Je me reste

var mystring = "String I want" 

MISE À JOUR: Il semble que je ne peux pas répondre à aucun de vous. Le SO doit agir. Quoi qu'il en soit ce que je suis en utilisant

var wholeParagraph = $('.comment-body p'); 

    var rating = wholeParagraph.substring(wholeParagraph.indexOf('['), 1+wholeParagraph.lastIndexOf(']')); 

    alert(rating); 

ne semble pas fonctionner?

+0

La chaîne est-elle quelque part dans le document? – James

+2

Keith: remplacez var wholeParagraph = $ ('. Comment-body p'); avec var wholeParagraph = $ ('. comment-body p'). text(); - Comme c'est le cas maintenant, vous allez simplement chercher la collection jQuery, pas le texte réel dans le paragraphe. –

+0

@Paolo, cela fonctionnera mais si vous essayez d'exécuter des remplacements sur text() alors vous rencontrerez des problèmes s'il y a d'autres éléments dans le paragraphe. para.html (para.text(). replace ('[...]', '')); // Les éléments dans le paragraphe seront supprimés ... – James

Répondre

-1

Utilisez la méthode tranche objet chaîne() pour supprimer premier et dernier caractères:

str = str.slice(1,-1); 
1
"[String I want]".replace(/^\s*\[|\]\s*$/g, ''); 

Cela devrait vous donner ce que vous cherchez. Vous pouvez également utiliser une fonction de découpage pour retirer le premier et le dernier caractère de la chaîne, de la même manière que le découpage de PHP, où vous pouvez donner un délimiteur optionnel.

MISE À JOUR: début et fin de tolérance des espaces

0

Je préférerais répondre Andrew Noyes. Je ne peux pas remettre en question et préciser que c'est mieux que d'autres, donc voici une autre possibilité d'obtenir la chaîne que vous voulez ..

str = str.substr (1, str.length -2);

3

est ici une version qui sera également gérer toute attaque ou les espaces de fin (ainsi que les supports imbriqués):

// This works 
var str = "[String I want]"; 
var mystring = str.substring(str.indexOf('['), 1+str.lastIndexOf(']')); 

// But it'll also work with these strings: 
var str = " [String I want] ";  // returns "String I want" 
var str = " [string I [really] want] "; // returns "String I [really] want" 
0

Il n'y a qu'un seul moyen fiable de le faire: pas à pas à travers les DOM et la recherche d'un match chaque noeud de texte.

Cette fonction fera juste que:

function findTextNodeWithMatch(regex, context) { 

    context = context || document.documentElement; 

    var childNodes = context.childNodes, 
     retTextNodes = [], 
     i = -1, node; 

    while (node = childNodes[++i]) { 
     if (node.nodeType === 3) { 
      var m; 
      while (m = regex.exec(node.data)) { 
       retTextNodes.push({ 
        node: node, 
        match: m 
       }); 
      } 
     } 
     if (node.nodeType === 1 && node.nodeName.toLowerCase() !== 'script') { 
      retTextNodes = retTextNodes.concat(arguments.callee(regex, node)); 
     } 
    } 

    return retTextNodes; 

} 

Utilisation:

var patternToMatch = /\[((?:\\\[|.)*)\]/g; 
var matchingNodes = findTextNodeWithMatch(patternToMatch, $('.comment-body p')[0]); 

for (var i = 0, len = matchingNodes.length; i < len; i++) { 
    // Loop through the matching nodes: 

    // Extract the string you want: 
    var theMatch = matchingNodes[i].match; 
    var myString = theMatch[1]; 
    alert(myString); 

    // Replace the string within the node: 
    var theNode = matchingNodes[i].node; 
    theNode.parentNode.replaceChild(document.createTextNode(theNode.data.replace(patternToMatch, '')), theNode); 

} 

En utilisant innerHTML est un élément n'est pas fiable car il peut contenir d'autres éléments et ces éléments peuvent avoir des attributs qui correspondent à ce que vous cherchez - vous ne voulez pas les enlever par erreur ...

0

Combinaison t il commente et autres réponses ...

var rating = $('.comment-body p').html().replace(/^\[\]$/g, ''); 
alert(rating); 
Questions connexes