javascript - 如何在Javascript中使用双方括号拆分()字符串
问题描述
我想改变这个
let str = "Tom left from [[his]] home";
到
array = ["Tom left from ", "[[his]]", " home"];
我试过这样
array = []; c = 0;
array = str.split(/([[[]]])/).filter(Boolean).forEach(e =>
e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? array.push('[[' + e + ']]') : array.push(e)
);
console.log(array)
解决方案
试试这个
str.split(/(\[\[.+?\]\])/).filter(Boolean)
就是这样,不需要额外的执行
PS关于您的代码:
1) 正则表达式中的方括号需要在它们前面加上反斜杠,因为它们是表达式语法的一部分
2)forEach 只是迭代元素,它返回未定义,所以当你为数组赋值时你的代码完全没有意义,所以无论你用变量数组做什么,你都会被消灭,在这种情况下使用 map 函数,它创建一个新数组,转换现有的价值
array = str.split(/whatever/).filter(Boolean).map(e =>
e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? '[[' + e + ']]' : e
);
推荐阅读
- ios - 使用 UICollectionViewController 重新排序的嵌套控制器
- swift - Firebase观察重复数据?
- android - 如何在 android RatingBar 上将“9/10”设置为“4.5/5”?
- list - Powerapps 悬念列表项错误等待括号关闭发现错误
- javascript - 如何在多列div中获取列索引
- c# - 我究竟如何使用reactiveui显示视图?
- ruby-on-rails - strftime(%Z) 返回错误结果
- css - 反应中的内联自定义 CSS
- android - 片段中的“getWritableDatabase”发生 NullPointerException
- c# - 使用同一个 UdpClient 在两个单独的线程上同时发送和接收 udp 数据报是否安全?