我有这个正则表达式:(?<=\[\[)(.*?)(?=\]\])
用于查找模式[[some text inside]]
,并且有效,但我找到了一个不起作用的案例:[[[ some text]]]
。
我试图找到一个解决方案,只找到双方括号的模式,如[[]]
&#34;确切地说&#34;。
答案 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)
我认为您的修改使问题大不相同。这是一个严格限制两个开始和结束括号。
^\[\[(((?!\[)(?!\]).)+)\]\]$
您可以使用组1仅选择文本。
答案 2 :(得分:0)