搞清楚正则表达式

时间:2010-12-02 15:55:35

标签: javascript regex

在编写正则表达式模式时我仍然不是那么好,并且在尝试找出以下字符串的搜索模式时遇到问题:

{embed_video('RpcF9EYXZpZFBhY2tfRklOQUwuZj','575','352','video_player')}

我基本上需要在页面中搜索散列{}标记之间的任何内容。

我试过这个:

string = $(".content").text();
string.match("^{[\w-]}");

但它不起作用......关于我可能做错的任何想法?

感谢大家的帮助!这就是我做的工作:

$("div", "html, body").each(function(){
        var text = $(this).text();

        if(text.match("^\{.*\}$")) {
            console.log("FOUND");
        }
    })

6 个答案:

答案 0 :(得分:3)

这应该找到花括号的最里面的内容(甚至是嵌套的)。

string.match(/\{([^\{\}]*)\}/)[1]; // the [1] gets what is within the parentheses.

编辑:

感谢下面的评论,这是一个更清洁的版本:

string.match(/\{(.*?)\}/)[1];

答案 1 :(得分:2)

一个问题是缺乏量词。就目前而言,您的正则表达式正在寻找单个\w-字符,由您的角色类表示。您可能正在寻找以下任何一种量词:

  • [\w-]* - 匹配0个或更多\w-个字符
  • [\w-]+ - 匹配1个或多个\w-字符

另一个问题是角色类的限制。 [\w-]()",空格或其他可能出现的非字字符不匹配。如果要匹配所有字符,请使用.。如果您想匹配}以外的所有字符,请改用[^}]

例如:

string = $(".content").text();
string.match("^{[^}]+}");

使用*将允许大括号内的内容为空。

旁注:我认为您正在准备eval(){中包含的代码}。出于安全和性能方面的原因,通常最好避免使用eval()(如果可能)。在您的情况下,您可以使用它:

var string = $(".content").text(), fn, args;
if (string.charAt(0) == "{" && string.charAt(string.length - 1) == "}") {
    fn = string.slice(1, string.indexOf("("));
    args = string.slice(string.indexOf("("), string.lastIndexOf(")")).split(",");

    window[fn].apply(null, args);
}

答案 2 :(得分:1)

如果你有机会使用eclipse,你可以使用正则表达式插件来看看你的正则表达式如何搜索你的文本。

我会尝试这个

string.match("^\{.*\}$");

答案 3 :(得分:1)

试试"\{.*?\}"。但它不会处理嵌套花括号的情况。 Here您可以在线测试您的正则表达式。

string.match("^\{(.*?)\}$")[1];

答案 4 :(得分:1)

搜索以下正则表达式:

var sRe = /\{([^\}]*)\}/g;
sText.match(sRe);

这意味着您正在搜索字符“{”后跟任何符号,但不能选择“}”,然后选择“}”结尾。

答案 5 :(得分:0)

我认为你需要逃避{}字符......它们在正则表达式中具有特殊意义......