0

我的输入字符串看起来像这样

inspect [foo - bar] with [errors - 15] 
create [doodle]
force delete [quux]

也就是说,在方括号内包含信息的行。

我想要的是一次取其中一条线并得到一个像

["inspect", "[foo - bar], "with", "[errors - 15]"]

使用正则表达式很容易分别收集括号表达式和括号表达式之间的部分:

var src = "inspect [foo - bar] with [errors - 15]"
var regexBracketed = /\[[a-zA-Z0-9_\- ]+\]/g;

// this returns an array of the bracketed expressions
console.log(src.match(regexBracketed));

// and this returns an array of the parts between the expressions
console.log(src.split(regexBracketed));

有没有一种简单的方法可以将所有内容都放在一个数组中?也许我以完全错误的方式攻击这个。

4

3 回答 3

2

您是指组(捕获括号)吗?/(.*)/?

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

例如,如果你想捕获括号中的字符串,那么你可以使用这个:

var r=/^\s*[^\[\]]*\[([^\[\]]+)\](?:[^\[\]]*\[([^\[\]]*)\])?\s*$/;
var m = "inspect [foo - bar] with [errors - 15] ".match(r);
console.log(m[1], m[2]);

您也可以添加\s*到表达式中以修剪空白。

于 2012-09-20T07:53:00.293 回答
1

这是我做的方式,加上一个 jsFiddle

var src = "inspect [foo - bar] with [errors - 15] " +
          "create [doodle] " +
          "force delete [quux]";

var regex = /[^\[]+|[^\]]+\]/g;

document.write(src.match(regex));​

输出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux]

而且我相信您知道如何随心所欲地修剪空白:)

为了解释这个看起来有点神秘的正则表达式,它只是说,“让我把所有字符都弄到 a [,或者,如果你已经在 a [,那么让我把所有字符都弄到],再加上]拜托!。 "

于 2012-09-20T07:54:58.200 回答
1

@akonsu 是对的,只需添加括号即可,如下所示:

var src = "inspect [foo - bar] with [errors - 15]";
var regexCapturing = /(\[[a-zA-Z0-9_\- ]+\])/;
console.log(src.split(regexCapturing));

它输出

 ["inspect ", "[foo - bar]", " with ", "[errors - 15]", ""] 

一些空格修剪并跳过最后一个空字符串,我已经准备好了。谢谢。

(我只是写这个作为答案,因为我不能在评论中使用代码格式。)

于 2012-09-20T08:04:17.283 回答