我一直在与Discord.js和Node一起使用一个快速机器人来查找一些东西。我需要一种方法来找到出现在两个正方形括号之间的所有匹配项,并将它们存储在字符串数组中。现在,我使用string-split()和一些正则表达式,但是我不确定要使用的正则表达式。
我试过使用一些不同的方法,包括/[^\[\[]+(?=\]\])/g和\[\[(.*?)\]\] -我不介意在结果中有实际的括号,我可以用string.replace()手动删除它们。
我还在使用普通的string.split()和其他字符串函数进行后备,而不是依赖正则表达式,但我仍然对可能的正则表达式版本感到好奇。
第一个正则表达式的结果是完全不正确的。例如,如果我尝试"does [[this]] work [at all]?",输出是"[[]]“和"at all",而实际上它不应该接受"at all",但它应该显示"[this]”。
在第二个正则表达式中,我变得更接近了,它返回“this”(正确)和"at all“(同样,它不应该接受"at at”)。
我不介意在输出中有括号,我可以自己手动删除它们,但我需要找到所有出现在两个括号之间的地方。
发布于 2019-04-27 22:06:41
试试这个正则表达式:
\[\[([^[\]]|(?R))*\]\]您正在尝试做的就是Matching Balanced Constructs。更多信息,请点击链接。
在进一步的测试中,不幸的是JS不支持(?R),因此这变得更加困难。您可以使用XRegExp包中的XRegExp.matchRecursive插件。
你的expression \[\[(.*?)\]\]应该可以工作了。下面是一个工作示例。
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);
发布于 2019-04-28 22:27:27
尝试我的解决方案
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);https://stackoverflow.com/questions/55881311
复制相似问题