【问题标题】:Spliting a string with multiple delimiters from an array [duplicate]从数组中拆分具有多个分隔符的字符串[重复]
【发布时间】:2019-07-05 06:27:54
【问题描述】:

我需要用多个分隔符分割一个字符串。

我的字符串是var str = "2$4@3*5"

我的分隔符(分隔符)数组是var del = ["$","@", "*"]

我正在使用正则表达式,但它不起作用。

str.split(new RegExp(del.join('|'), 'gi'));

结果应该是["2","4","3","5"]

但是我收到一个错误SyntaxError: Invalid regular expression: /*/: Nothing to repeat

当我删除 * 时,结果数组是 ["2$3',"3", "5"]

如何使用分隔符数组中的多个分隔符进行拆分?

为什么这不适用于$*

【问题讨论】:

  • 因为 $ 和 * 在正则表达式中有特殊含义...试试 \\$ \\*

标签: javascript arrays regex string


【解决方案1】:

您需要先转义特殊字符 - 来自this answerreplace 函数:

var str = "2$4@3*5";    
var del = ["$", "@", "*"];    

const res = str.split(new RegExp(del.map(e => e.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join("|"), "gi"));
    
console.log(res);

【讨论】:

  • 感谢工作很好,谢谢!
  • 我会将RegExp.escape 分开,就像在linked answer 中一样,并像del.map(RegExp.escape) 那样映射。更具可读性。
  • 是的,但是如果您不需要将其添加到对象中,那就更容易了——而且您可以构造自己的函数@TeWu。
【解决方案2】:

像这样试试。

我在 split 中传入了 Regex 表达式。

var str = "2$4@3*5"

var res=  str.split(/[$,@,*]+/)

console.log(res)

【讨论】:

  • 分隔符数组需要是动态的,这就是为什么我更喜欢 Jack 在这种情况下的答案。
猜你喜欢
  • 2021-11-10
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 2017-03-21
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多