【问题标题】:Get array of both matches and non-matches获取匹配和不匹配的数组
【发布时间】:2017-02-17 21:11:20
【问题描述】:

我想要做的是将一个字符串拆分为一个由多个连续子字符串组成的数组,在给定正则表达式的匹配项和不匹配项之间交替。

像这样:

[nonmatch, match, nonmatch, match...]

例如,使用正确的正则表达式(此处的实际表达式并不重要),

"I [went to the doctor] today to [eat some] food"

可能变成:

["I ", "[went to the doctor]", " today to ", "[eat some]", " food"]

我需要这样做,因为我需要暂时取出字符串的某些部分,对字符串的其余部分做一些事情,然后将前面的部分插入到它们应该再次使字符串完整的位置(只需将整个数组组合成一个字符串)。

我只能从搜索中找到想要摆脱某些字符串(例如上例中的 [])或将一些不匹配项和匹配项连接在一起的人,例如:

["I ", "[went to the doctor] today to ", "[eat some] food"]

【问题讨论】:

  • 你为什么不认为使用的正则表达式不重要?没有它,你的问题对我来说似乎不清楚。
  • 这个还是模糊的!!!
  • 正则表达式是一些在方括号之间选择字符组的正则表达式。我想以正确的顺序构建一个包含该正则表达式的匹配项和不匹配项的数组。
  • 可能有多少层?这是一个可能的字符串:I [went [to] the] doctor???
  • 你可以分割你的字符串,然后对部分做你想做的事,但你也可以使用String.prototype.replace作为替换参数。

标签: javascript arrays regex


【解决方案1】:

您可以为此使用split,向其传递一个具有捕获组(即括号)的正则表达式。那么这个定界部分也将包含在结果数组中:

var s = "I [went to the doctor] today to [eat some] food"
var result = s.split(/(\[.*?\])/);
console.log(result); 

匹配总是在结果数组的奇数索引处。

【讨论】:

  • 我认为对于给定的描述,这不仅仅是一个正确的答案
  • 这正是我要发布的内容。
  • 这正是我所追求的,实际上。十分感谢。它甚至可以确保匹配总是在奇怪的索引上,这非常棒,而且正是我所追求的。
  • 谢谢你——这也是我所追求的。
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多