【问题标题】:Confused why my regex expression isn't working? [duplicate]困惑为什么我的正则表达式不起作用? [复制]
【发布时间】:2019-10-01 05:03:06
【问题描述】:

尝试创建一个正则表达式,在 ',' 和 '\n' 处拆分字符串,然后传入自定义分隔符(在我的代码中由 firstChar 表示)。

传入字符串的格式:{delimiter}\n{numbers}。我在网上使用过 regex101,它似乎可以在那里工作,但在我的实际代码中,它并没有在自定义分隔符处拆分,所以不确定我做错了什么。

if (str.includes('\n')) {
    let firstChar = str.slice(0, 1);
    if (parseInt(firstChar)) {
      strArr = str.split(/,|\n/) ;
    } else {
      strArr = str.split(/[,|\n|firstChar]/);
    }
}

期望 ';\n2;5' 等于 7,但我的数组由于某种原因拆分为 [";", "2;5"]。

【问题讨论】:

  • 你的第一个字符不是数字,所以你每次都会去 else 语句
  • @CodeManiac 这就是我想要的。如果第一个字符是数字,我想将其拆分为 '\n' 和 ','。否则,我想将它拆分为前面提到的分隔符以及传入的自定义分隔符(在本例中为';')。
  • [,|\n|firstChar][\n,|Cafhirst] 完全相同。

标签: javascript regex string split


【解决方案1】:

您的第一个字符不是数字,因此您可以直接进入 else 条件,如果您想要动态正则表达式,则需要使用 RegExp 构建它

这里也不需要字符类

/[,|\n|firstChar]/

应该是

/,|\n|firstChar/

let splitter = (str) => {
  if (str.includes('\n')) {
    let firstChar = str.slice(0, 1);
    if (parseInt(firstChar)) {
      return str.split(/,|\n/);
    } else {
      let regex = new RegExp(`,|\\n|\\${firstChar}`, 'g') // building a dynamic regex here
      return str.split(regex).filter(Boolean)
    }
  }

}

console.log(splitter(";\n2;5"))
console.log(splitter("*\n2*5"))

【讨论】:

  • 当我运行你的代码时,它会像这样分裂: [ ";", "2;5" ] 这不是我想要的。我想要 [2,5]
  • @JoeSpinelli 您需要构建一个动态正则表达式,检查更新一个,
  • 我以前从未使用过动态正则表达式。我的案子怎么让我需要它?为什么不像这样传递它: str.split(/,|\n|firstChar/) 工作? firstChar === ';'那么它与简单地传递';'不一样吗?进入表达式?
  • @JoeSpinelli firstChar 将被视为字词firstChar 而不是变量firstChar,当您想要构建一个需要使用RegExp 构建的动态正则表达式时
  • wowww 我不敢相信我从来没有意识到 smh haha​​ 那太烦人了。非常感谢,你太棒了!
猜你喜欢
  • 2020-03-31
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多