使用排除表达式搜索正则表达式变量

时间:2012-02-21 23:17:25

标签: javascript regex

我正在尝试在包含var exp = "foo" * 的大型stringText中搜索表达式(exp),但不包括以“<”开头的所有内容并以“>”

结尾

现在我知道怎么写这样:

    var regexp = new RegExp(exp, 'g');
    match = regexp.exec(stringText)

如何编写排除条件?

我知道它应该是/<.+>/g,但我该如何组合呢?我知道这不对,但我该怎么做?

    var regexp = new RegExp(exp + /<.+>/, 'g');

谢谢,Alon

==更新===

我想在这个字符串中搜索'a':

"a dog <span class="something"> had a  </span> and a cat"

我想要它打第一个'a','a'里面的'a',之后的'a'和''和'''''''中的'a'

我不想在'span'或'class'中获得'a'或者在&lt;&gt;

中翻译

3 个答案:

答案 0 :(得分:1)

如果你想解析html / xml,我认为你应该寻找除正则表达式以外的东西。比我更好的男人explained why

如果你一直在使用正则表达式,或者你的问题不能保证更强大的解决方案,我建议你做这样的事情,因为JS没有看起来很好看:

var input = "a dog <span class='something'> had a  </span> and a cat";

// Remove anything tag-like
var temp = input.replace(/<.+?>/g, "");

// Perform the search
var matches = new RegExp(exp, "g").exec(temp);

或者一个班轮:

var matches = new RegExp(exp, "g").exec(input.replace(/<.+?>/g, ""))

答案 1 :(得分:0)

你想要什么似乎是消极的回顾和前瞻。不幸的是,javascript中没有回顾。只是前瞻。

E.g。

/foo(?!bar)/g 

将与foo中的the foo fighters匹配,但与foo中的the foobar solution不匹配

所以你可能想要像

这样的东西
/foo(?!>)/g

你可以在http://www.regular-expressions.info/lookaround.html#lookaheadhttp://www.regular-expressions.info/javascript.html上的javascript正则表格上学习前瞻

答案 2 :(得分:0)

也许你想要的东西最容易通过首先删除(用空字符串替换)所有html标签的出现来实现,例如这个

var tmp = exp.replace(/<[^>]+>/g, '');

然后,您可以轻松匹配正则表达式,在新的临时无html字符串中查找。