我有看起来像这样的输入字符串
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));
有没有一种简单的方法可以在一个数组中获取所有内容?也许我以完全错误的方式攻击它。
你指的是组(捕获括号)吗? /(.*)/
?
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*
以修剪空格。
这是我这样做的方式,加上一个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]
我相信您知道如何随心所欲地修剪空格:)
为了解释正则表达式,它看起来有点神秘,它只是说,"让我的所有角色都达到一个[
,或者,如果你已经在[
,那么让我所有的字符都达到]
,再加上那个]
请!
@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]", ""]
一些空格修剪并跳过最后一个空字符串,我就准备好了。谢谢。
(我只是写这个作为答案,因为我不能在注释中使用代码格式。