javascript正则表达式,同时拆分和匹配?

javascript正则表达式,同时拆分和匹配?,javascript,regex,split,Javascript,Regex,Split,我有这样的输入字符串 inspect [foo - bar] with [errors - 15] create [doodle] force delete [quux] 也就是说,包含方括号内信息的行 我想要的是一次取一行,然后得到一个数组,就像 ["inspect", "[foo - bar], "with", "[errors - 15]"] 使用正则表达式很容易分别收集括号内的表达式和括号内表达式之间的部分: var src = "inspect [foo - bar] with

我有这样的输入字符串

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));

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

您是指组(捕获括号)<代码>/(.*)/

例如,如果要捕获括号中的字符串,则可以使用以下方法:

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

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

您指的是组(捕获括号)<代码>/(.*)/

例如,如果要捕获括号中的字符串,则可以使用以下方法:

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

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

下面是我的操作方法,另外

产出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux]
我相信你知道如何根据自己的喜好删减空格:)


为了解释正则表达式,它看起来有点神秘,它只是说,“给我所有的字符到
[
,或者,如果你已经在
[
,那么给我所有的字符到
]
,再加上
]
。”

这是我做的方法,再加上

产出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux]
我相信你知道如何根据自己的喜好删减空格:)


为了解释正则表达式,它看起来有点神秘,它只是说,“给我所有的字符,直到
[
,或者,如果你已经在
[
,那么给我所有的字符,直到
]
,再加上
]
。”

@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]", ""] 
在最后一个空字符串上进行一些空格修剪和跳过,我就准备好了。谢谢


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

@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]", ""] 
在最后一个空字符串上进行一些空格修剪和跳过,我就准备好了。谢谢


(我写这篇文章只是为了回答,因为我不能在评论中使用代码格式。)

你知道,我相信我是这样的。接受了。你知道,我相信我接受了。已接受。我已将正则表达式添加到我的答案中,允许您避免清理结果数组。我已将正则表达式添加到我的答案中,允许您避免清理结果数组。