使用正则表达式在lookbehind和lookahead之间使用括号和括号来获取字符串

时间:2018-02-24 03:48:18

标签: javascript regex

我已经在我的JS项目中使用Regex进行了几个小时的研究。我遇到了一个尝试在'标签'之间获取字符串的问题。我现在唯一的问题是我在标签中使用的字符。

字符串我在看:

[](/TABLE_1)
##Table 1
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_1)

[](/TABLE_2)
##Table 2
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_2)

[](/TABLE_3)
##Table 3
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_3)

我正在尝试获取

中的字符串
[](/TABLE_1)

[](/TABLE_2)

目前,我正在尝试使用Regex表达式:

(?<=[](/TABLE_1))(.*)(?=[](/END_TABLE_1))

我注意到我的无法更改的标签无法在其中被检测到。

1 个答案:

答案 0 :(得分:0)

您必须转发()[]因为它们在正则表达式中被识别为元字符,因此您不应在JavaScript中使用(?<=)(?=)正面的后观点。

正则表达式\[\]\(\/(TABLE_[12])\)\n([\S\s]+)\n\[\]\(\/END_\1\)

var text = `[](/TABLE_1)
##Table 1
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_1)

[](/TABLE_2)
##Table 2
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_2)

[](/TABLE_3)
##Table 3
Header 1|Header 2|Header 3
:-:|:-:|:-:
Value 1|Value 2|Value 3
Value 1|Value 2|Value 3
[](/END_TABLE_3)`;

var re = /\[\]\(\/(TABLE_[12])\)\n([\S\s]+)\n\[\]\(\/END_\1\)/g;
var m;

do {
    m = re.exec(text);
    if (m) {
        console.log(m[2]);
    }
} while (m);