Javascript正则表达式解析字符串,如" string1 [string2] [string3]"到数组

时间:2016-09-26 08:13:39

标签: javascript regex

我试图通过在Javascript中使用regexp来解析下面的字符串:

string1[string2][string3]

其中" string1"总是存在,同时其他字符串可能会错过,2或20,但总是在方括号之间。 我想从前一个字符串实现的结果是一个数组或类似的东西:

['string1', 'string2', 'string3']

我设法创建一个正则表达式,但它只需要最后一个字符串" string3"在方括号之间而不是所有这些,这就是我试过的:

/[^\[]+(\[([^\]]+)\]){0,}/

希望有人可以提供帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

最简单的就是使用:

([^\[\]]+)

基本上只接受任何没有方括号的字符串:https://regex101.com/r/uS5bZ2/1

但是,如果文字包含迷路[],例如'string1[str[ing2][string3]',则可能会遇到麻烦,在这种情况下,我希望得到['string1', 'str[ing2', 'string3']。在这种情况下,您可以使用:https://jsfiddle.net/pt8e2p5w/1/

var s = 'string1[str[ing2][string3]'
var matches = ['']

var open = false
for (i in s) {
    if (s[i] == '[' && !open) {
        matches.push('')
        open = true
    } else if (s[i] == ']' && open) {
        open = false
    } else {
        matches[matches.length - 1] += s[i]
    }
}

console.log(matches)

输出:``

["string1", "str[ing2", "string3"]