【问题标题】:Split the given string into arrays将给定的字符串拆分为数组
【发布时间】:2021-03-07 05:43:29
【问题描述】:

假设给定的字符串是:

[[1]] 用于汽车,[[2]] 用于自行车

我想使用正则表达式或任何其他方式将字符串拆分为字符串数组,当 [[any number]] 时(例如:[[1]]、[[2]] ) 遇到。

[ 
   [[1]], 
   " is for cars, as ", 
   [[2]],
   " is for bikes"
]

What I have tried: 

"[[1]] is for cars, as [[2]] is for bikes".split(/\[\[(\d+)\]\]/gi);

This returns ",1, is for cars, as ,2, is for bikes"

【问题讨论】:

  • 试试这个:"[[1]] is for cars, as [[2]] is for bikes".split(/\s*(\[\[\d+\]\])\s*/gi).filter(Boolean);
  • 它有效,但你能解释一下这里的过滤器是做什么的吗? @anubhava

标签: javascript arrays regex


【解决方案1】:

您的代码中有几个问题:

  1. .split 在错误的位置使用捕获组,即您只捕获数字而不是 [[<digits>]]
  2. 由于在开始时也发现了拆分模式,因此您需要使用.filter 方法从结果数组中删除一个空字符串。

const str = "[[1]] is for cars, as [[2]] is for bikes";
var arr = str.split(/(\[\[\d+\]\])/gi).filter(Boolean);
console.log(arr);
/*
[
  "[[1]]",
  " is for cars, as ",
  "[[2]]",
  " is for bikes"
]
*/

【讨论】:

  • 如何在字符串中包含空格,因为它会忽略单词后的空格? (ex 用于汽车,as )它输出(用于汽车,as)
  • 只需从两边删除 \s* 以使其成为 str.split(/(\[\[\d+\]\])/gi).filter(Boolean) 但您的预期输出未显示前导/尾随空格。
【解决方案2】:

使用正向后视正向前瞻

const myString = "[[1]] is for cars, as [[2]] is for bikes";
const output = myString.split(/(?<=\[\[\d+\]\])\s|\s(?=\[\[\d+\]\])/g);
console.log(output);

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 2012-02-22
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多