首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用regex将字符串拆分为两个括号?

如何使用regex将字符串拆分为两个括号?
EN

Stack Overflow用户
提问于 2019-04-27 22:01:32
回答 2查看 141关注 0票数 1

我一直在与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”)。

我不介意在输出中有括号,我可以自己手动删除它们,但我需要找到所有出现在两个括号之间的地方。

EN

回答 2

Stack Overflow用户

发布于 2019-04-27 22:06:41

试试这个正则表达式:

代码语言:javascript
复制
\[\[([^[\]]|(?R))*\]\]

您正在尝试做的就是Matching Balanced Constructs。更多信息,请点击链接。

在进一步的测试中,不幸的是JS不支持(?R),因此这变得更加困难。您可以使用XRegExp包中的XRegExp.matchRecursive插件。

你的expression \[\[(.*?)\]\]应该可以工作了。下面是一个工作示例。

代码语言:javascript
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2019-04-28 22:27:27

尝试我的解决方案

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55881311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档