簡體   English   中英

JS提取方括號標記之間的文本

[英]JS extract text between brackets tags

我進行了搜索,但是似乎找不到正確的答案,所以我在這里問這個問題(regexp新手)。

我正在嘗試提取包含以下內容的值:

[tag1]include this [tag1]

我只想得到結果“包括此”。 為了使其更加復雜,正則表達式需要查看值tag1 ,因為我在同一正文中獲得了多個括號。 最重要的是:必須包括多行上的tekst。

到目前為止,我嘗試了以下單行正則表達式(只能使用單行正則表達式):

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

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

這兩個似乎都是第一部分的竅門(僅在標記之間提取文本“ include this”,但是他沒有看[tag1]部分。簡而言之:我正在尋找一個正則表達式,可以在方括號“ tag1”的內部提取值“ include this”。

我感覺很親密,但現在我被卡住了。

請幫忙?

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

嘗試一下。請參見演示。

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

這將匹配兩個匹配的標簽並提取中間的標簽。

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

$ 1反向引用將獲取您的標簽(示例中為“ tag1”),$ 2將提取內部文本。

如果要兩個“ tag1”標簽之間的所有文本,請執行此操作

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

如果要匹配標簽之間的所有文本,請執行此操作

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

通過創建將標簽和字符串作為參數的函數,您可能不需要Regex就可以做到這一點,如下所示:

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>

現場演示在這里

或不要使用regexp,這是當regexp“不會表現” [1]並且您正在做的事情很簡單時通常執行的操作。 (我意識到您的問題明確要求使用正則表達式,但是希望這可能會有所幫助。)

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;
}

小提琴

[1]是的,當regexp“不會表現”時,我意識到這是我的失敗。 ; ^)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM