正则表达式双括号[[text]]

时间:2014-06-04 15:01:24

标签: javascript regex

我有这个正则表达式:(?<=\[\[)(.*?)(?=\]\])用于查找模式[[some text inside]],并且有效,但我找到了一个不起作用的案例:[[[ some text]]]

我试图找到一个解决方案,只找到双方括号的模式,如[[]]&#34;确切地说&#34;。

3 个答案:

答案 0 :(得分:1)

我不会认为你可以通过后视来完成这项工作(此外,Javascript并不支持看后面),但你可以试试这个:

(?:(^|[^\[])\[\[)([^\]]*?)(?:\]\](?:($|[^\]])))

第二个捕获组将包含您想要的文本。

匹配,

 (^|[^\[])   start of string or NOT a `[`
 \[\[        two opening brackets
 ([^\]]*?)   any number of non closing brackets `]`
 \]\]        two closing brackets
 ($|[^\]])   End of the string or NOT a `]`

示例:

var reg = /(?:(^|[^\[])\[\[)([^\]]*?)(?:\]\](?:($|[^\]])))/;
var text1 = "[[some text]]"
var text2 = "[[[some other text]]]"

reg.test(text1);     // true
reg.test(text2);     // false

reg.exec(text1)      //["[[some text]]", "", "some text", ""]
reg.exec(text2)      // null

答案 1 :(得分:0)

在这里,用于选择[]括号之间的任何内容:

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

Demo 1
例如

var str = "[[[ some text]]]"
var res = str.match(/((?!\])(?!\[).)+/g);
console.log(res)

我认为您的修改使问题大不相同。这是一个严格限制两个开始和结束括号。

^\[\[(((?!\[)(?!\]).)+)\]\]$

Demo 2

您可以使用组1仅选择文本。

答案 2 :(得分:0)

假设双括号之间没有[]个字符,此正则表达式适用于您。

(?<=\[\[)([^\[\]]*)(?=\]\])

Demo on regex101.com