JS在括号标记之间提取文本

时间:2014-11-14 16:27:04

标签: javascript regex

我搜索和搜索,但我似乎无法找到正确的答案,所以我在这里问(regexp newbie)。

我试图在以下内容中提取值包含此

[tag1]include this [tag1]

我只想获得价值"包括这个"结果。为了使这更复杂,正则表达式需要查看值 tag1 ,因为我在同一个主体中有多个括号。最重要的是:必须包含多行的tekst。

到目前为止,我尝试了以下单行regexp(只能使用单行regexp):

(?!\[?.*\]).*(?=\{\/?.*\}) 

(\[[^\]]+\](?!\s)([\w']+)(?!\])\b|(?:^|\s)([\w']+)(?!\])\b)

这两个似乎都是第一部分的技巧(仅提取文本"包括这个"标签之间,但他没有看到部分[tag1]。所以在简短:我正在寻找可以提取价值的正则表达式"包括这个"同时查看括号内部," tag1"。

我感觉真的很亲密,但现在我被卡住了。

请帮帮忙?

5 个答案:

答案 0 :(得分:1)

\[tag1\]((?:(?!\[tag1\]).)+)

试试这个。看看demo.Grab捕获。

http://regex101.com/r/yW4aZ3/117

答案 1 :(得分:1)

这将匹配两个匹配的标签并提取中间。

\[([^\]]+)\]([^\[]+)\[\1\]

$ 1反向引用将获取您的代码("代码1和#34;在您的示例中),$ 2将提取内部文本。

答案 2 :(得分:1)

如果您希望两个“tag1”标签之间的所有文本都执行此操作

(?<=\[tag1\])(.|\r|\n)*?(?=\[/?tag1\])

如果您希望匹配标记之间的所有文本都执行此操作

(?<=\[([a-z0-9]+)\])(.|\r|\n)*?(?=\[/?\2\])

答案 3 :(得分:0)

您可以通过创建函数将标记和字符串作为参数,而不使用正则表达式来执行此操作,如下所示:

function extractText(tag, str){    
        tL = tag.length; //tag length
        tP = str.indexOf(tag); // position of tag
        sT = str.substr((tP+tL)); //remaining string after tag          
        cT = sT.indexOf(tag); //closing tag position
        return sT.substring(0,cT)
}


<a href="javascript:alert(extractText('[tag1]','[tag1] include this [tag1]'))">Test</a>

现场演示是here

答案 4 :(得分:0)

或者不使用正则表达式,这正是我在正则表达式不会表现出来时通常所做的事情[1]而你正在做的事情非常简单。 (我意识到你的问题明确要求regexp,但希望这可能有用。)

function parseTags(str)
{
    var indexNext,
        arrayOut = [];

    while (str.indexOf("[tag1]") >= 0)
    {
        str = str.substring(str.indexOf("[tag1]") + 6);

        // What do you want to do if a tag's missing?
        // Skipping the end tag-less "match" for now.
        indexNext = str.indexOf("[tag1]");
        if (indexNext >= 0)
        {
            arrayOut.push(str.substring(0, indexNext));
            str = str.substring(indexNext + 6);
        }
        // Alternately, could `break` on else and save a trip.
    }

    return arrayOut;
}

Fiddle

[1]是的,当正则表达式没有表现出来时,我意识到我的失败了#34;。 ; ^)