从方括号中获取文本的正则表达式

10

可能是重复问题:
正则表达式:找到两个字符之间的字符串,但不包括分隔符

我有一个函数,需要获取方括号中的文本,但不包括方括号。例如:

this is [test] line i [want] text [inside] square [brackets]

我想从上面的那一行中获取单词:

test
want
inside
brackets

我正在尝试使用/\[(.*?)\]/g来做这个,但我得到的不仅是括号内的字词,也有一些不应该出现的括号。

我在 SO 上搜索了一些类似的问题,但那些解决方案对我都没用。这是我找到的一个解决方案:(?<=\[)[^]]+(?=\])。它在 RegEx coach 中有效,但在 JavaScript 中无效。这是我从这里查找到的参考资料

到目前为止,我已经做了以下工作:演示

请帮忙。


方括号不是普通字符,必须与其他字符区别对待。 - sohaan
2个回答

30
一个向前查看就可以解决这个问题:
 a = "this is [test] line i [want] text [inside] square [brackets]"
 words = a.match(/[^[\]]+(?=])/g)

但在一般情况下,exec 或基于 replace 的循环会导致更简单的代码:

words = []
a.replace(/\[(.+?)\]/g, function($0, $1) { words.push($1) })

前瞻正则表达式是否可以简化? /[^[]]+(?=])/g - Jules

6

这个 fiddle 使用 RegExp.exec 并且只输出括号内的内容。

var data = "this is [test] line i [want] text [inside] square [brackets]"
var re= /\[(.*?)\]/g;
for(m = re.exec(data); m; m = re.exec(data)){
    alert(m[1])
}

先生,您能否请解释一下for循环中正在发生的事情,并且我们可以使用underscore.js的_each()函数来迭代吗? - sohaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接