我一直在使用Discord.js和Node开发一个快速的bot来查找内容。我需要一种方法来查找出现在两个方括号之间的所有事件,并将它们存储在字符串数组中。目前,我正在将string-split()与一些正则表达式一起使用,但是我不确定要使用的正则表达式。
我尝试使用几种不同的括号,包括/[^\[\[]+(?=\]\])/g
和\[\[(.*?)\]\]
-我不介意在结果中包含实际的括号,可以使用string.replace()手动将其删除。
我还在使用普通的string.split()和其他字符串函数进行后备工作,而不依赖于正则表达式,但是我仍然对可能的正则表达式版本感到好奇。
第一个正则表达式的结果完全不正确。例如,如果我尝试"does [[this]] work [at all]?"
的输出是“ [[]]”和“ [atall]”,那么当它实际上不应该使用“ at”时,却应该显示“ [[this ]]”。
在第二个正则表达式中,我稍微靠近一点,它会返回“ this”(正确)和“ [at all]”(再次,它不应使用“ all”)。
我不介意在输出中包含方括号,我可以自己手动将其删除,但是我需要找到所有出现在两个方括号之间的事件。
答案 0 :(得分:0)
尝试此正则表达式:
\[\[([^[\]]|(?R))*\]\]
您尝试做的事情称为Matching Balanced Constructs。链接中的更多信息。
不幸的是,在进一步测试中,JS不支持(?R)
,因此这变得更加困难。您可以使用XRegExp.matchRecursive软件包中的XRegExp插件。
您的表达式\[\[(.*?)\]\]
应该起作用。下面的工作示例。
var str = 'does [[this]] work [at all] with another double [[here]]?';
var result = str.match(/\[\[(.*?)\]\]/g);
var newDiv = document.createElement("div");
newDiv.innerHTML = result;
document.body.appendChild(newDiv);
答案 1 :(得分:0)
尝试我的解决方案
var str = "does [[this]] work [at all]?";
var regexp = /\[([a-z0-9\s]+)\]/ig;
var resultArray = str.match(regexp);
resultArray = resultArray.map((item) => {
return item.replace(/(\[|\])/g, "");
})
console.log(resultArray);