2009-04-21 4 views
1

J'ai une regex qui recherche la source d'une page qu'elle récupère via Ajax et obtient toutes les données entre et y compris les balises fieldet.Javascript regex renvoyant null mais il ne devrait pas être. Pourquoi?

Voici mon javascript:

var req = new XMLHttpRequest(); 
var regex = new RegExp("<(fieldset)\b[^>]*>.*?</\1>"); 

function showEditForm(i) { 

    req.open('GET', '/admin/maps/edit/' + i, false); 
    req.send(null); 

    var response = req.responseText; 
    //strip out all the line breaks 
    var responseStripped = response.replace(new RegExp("\\n|\\r", "g"), ""); 

    var regexed = regex.exec(responseStripped) 
    alert(regexed); 

} 

est ici la source de responseStripped:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Gessner Engineering | Administrative Area | edit</title> <link href="/stylesheets/scaffold.css?1236625014" media="screen" rel="stylesheet" type="text/css" /> </head><body> <div id="user-bar-greeting">Logged in as Thomas Gessner</div> <div id="user-bar-action" >(<a href="/logout" title="Log out">Log out</a>)</div><div id="header"></div><ul id="menu"> <li><a href="/admin">Home</a></li> <li><a href="/admin/maps">Geotechnical Map</a></li> <li><a href="/admin/profiles">Profiles</a></li> <li><a href="/admin/projects">Projects</a></li> <li><a href="/admin/users">Users</a></li></div><div id="content"> <h1></h1> <fieldset><legend>Edit Test Marker</legend><form action="/admin/maps/1" class="edit_map" enctype="multipart/form-data" id="edit_map_1" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="1422cd87ff4d68b2b23c9015a0568bffd47fbfeb" /></div> <p> <label for="map_name">Name</label><br /> <input id="map_name" name="map[name]" size="30" type="text" value="Test Marker" /> </p> <p> <label for="map_description">Description</label><br /> <textarea cols="40" id="map_description" name="map[description]" rows="5">test</textarea> </p> <p> <label for="category_id">Category:</label><br/> <select id="map_category_id" name="map[category_id]"><option value="">Select One</option></select> </p> <p> <label for="map_address">Address</label><br /> <input id="map_address" name="map[address]" size="30" type="text" /> </p> <p> <label for="map_address2">Address2</label><br /> <input id="map_address2" name="map[address2]" size="30" type="text" /> </p> <p> <label for="map_city">City</label><br /> <input id="map_city" name="map[city]" size="30" type="text" /> </p> <p> <label for="map_state">State</label><br /> <input id="map_state" name="map[state]" size="2" type="text" /> </p> <p> <label for="map_zip">Zip</label><br /> <input id="map_zip" name="map[zip]" size="30" type="text" /> </p> <p> <input id="map_submit" name="commit" type="submit" value="Create" /> </p></form></fieldset></div></body></html> 

J'ai vérifié que les travaux regex dans RegexBuddy et à RegexPal.

Cependant, quand tout est dit et fait, je reçois null retourné.

Qu'est-ce que je fais mal?

Merci!

S'il vous plaît noter que ceci est sous forme de test, il peut sembler laid, mais j'ai essayé de le décomposer étape par étape, ce qui est le dernier état où il était.

Répondre

7

Vous avez oublié d'échapper à la barre oblique inverse la chaîne:

var regex = new RegExp("<(fieldset)\\b[^>]*>.*?</\1>"); 
+1

Merci Guffa. J'ai dû échapper à l'autre aussi, cela a fonctionné: var regex = new RegExp ("<(fieldset) \\ b [^>] *>. *?"); Avec une réponse aussi simple et directe, devrais-je supprimer cette question? –

+0

@Zach Non, ne pas supprimer la question - il y a toutes les chances que quelqu'un d'autre pourrait avoir un problème similaire :-) –

+0

J'étais prêt à tirer mes cheveux sur un problème similaire, mais ensuite trouvé cela. Je suis très reconnaissant que cela n'a pas été supprimé! – DanM7

Questions connexes