【问题标题】:Capture Groups with Multiple Delimiters使用多个分隔符捕获组
【发布时间】:2021-08-22 15:15:12
【问题描述】:

在Javascript中,我有ascii文本行,每行可以有多组$分隔的文本,如下图。


输入文本:In the quadratic polynomial $ax^2 + bx + c$, $a$ should not be $0$


我需要一种创建数组的高效方法,它应该包含单词或分隔字符串。例如,在解析完上面的行之后,我需要以

结尾

想要的结果:["In", "the", "quadratic", "polynomial", "$ax^2 + bx + c$", "," "$a$", "should", "not", "be", "$0$]


没有帮助的模式:"\\$(.|\v)*?\\$"


基本上,我需要解析字符串并提取以空格或制表符分隔的单词,但我必须将 $ 分隔的文本视为单个单词。

但这真的是我的智慧的尽头。请帮忙:-)

【问题讨论】:

  • $ 分隔部分中可以有空格或制表符吗?例如,$ax^2 + bx + c$?
  • 是的,你是对的。当我忘记包含空格时,我很草率。对不起!
  • $ 分隔的文本中可以有空格。并且在输出中,整个 $ 分隔的部分需要保持原样,不做任何更改。这部分也是我在第一个版本的问题中错过的,但我只是编辑了。谢谢。

标签: javascript regex string pattern-matching capture-group


【解决方案1】:

你可能会使用

\$[^$]*\$|\S+
  • \$匹配一个$
  • [^$]* 匹配除 $ 之外的任何字符 0+ 次(或使用 [^$\r\n]* 不跨越换行符)
  • \$匹配一个$
  • |或者
  • \S+ 匹配 1+ 个空格字符

Regex demo

const regex = /\$[^$]*\$|\S+/g;
const s = "In the quadratic polynomial $ax^2 + bx + c$, $a$ should not be $0$";
console.log(s.match(regex));

【讨论】:

  • @T.J.Crowder 是对的,我忘记在示例输入中包含空格。我编辑了问题并包含了空格。
  • @srini.rgs - 更新后的答案按照我认为您想要的方式处理分隔区域内的空格和制表符。
  • 是的。更新的答案满足了我的要求。绝对地。谢谢你和@Thefourthbird
猜你喜欢
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
相关资源
最近更新 更多