[英]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”。
我感覺很親密,但現在我被卡住了。
請幫忙?
這將匹配兩個匹配的標簽並提取中間的標簽。
\\[([^\\]]+)\\]([^\\[]+)\\[\\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.