使用正则表达式提取字符串

时间:2012-01-11 10:49:48

标签: javascript regex

这是HTML代码的一小部分,我希望得到包含的所有代码< ?和?取代。

简单地说,我只想提取下面给出的字符串。 例如,

   var code='<td>Total Response Sets</td><? if(byExposure) { ?><td style="text-align:right;padding-right:10px"><?= question.totals["control"] ?></td>';

  // how to extract the required code with regular expression ?

使用npinti后,我使用下面的代码,它给我第一个表达式&lt;%&amp; %取代。但是,我如何获得下面几个表达式?

var patt=/<\?\s*(.*?)\s*\?>/g;
var result=patt.exec(code);
console.log(result[1]);  // o/p -> if(byExposure) {

(有关详细信息,代码用于在underscore.js中进行模板化)

3 个答案:

答案 0 :(得分:1)

这个正则表达式:

<\?\s*(.*?)\s*\?>

应该符合您的需要。从给定的字符串中匹配以下内容:

<? if(byExposure) { ?>

<?= question.totals["control"] ?>

然后,您可以使用组提取标记之间的内容。检查this之前的SO线程,看看它是如何完成的。

这应该完成工作:

var code='<td>Total Response Sets</td><? if(byExposure) { ?><td style="text-align:right;padding-right:10px"><?= question.totals["control"] ?></td>';
var patt=/<\?\s*(.*?)\s*\?>/g;
var result=patt.exec(code);

while (result != null) {
    alert(result[1]);
    result = patt.exec(code);    
}

答案 1 :(得分:1)

而不是exec,请使用match方法:

res = code.match(patt);

<强>输出:

["<? if(byExposure) { ?>", "<?= question.totals["control"] ?>"]

答案 2 :(得分:0)

我不确定你要提取什么。你只需要&lt ;?之间的第一个字符串吗?和?&gt;然后你可以使用:

(/<\?(.*?)\?>/.exec( code ))[1]

这将返回 if(byExposure){。如果你想匹配第一个&lt;?然后你可以使用:

(/<\?(.*?)\?>/.exec( code ))[1]