【问题标题】:Split string based on array of characters in array in JS [duplicate]基于JS中数组中的字符数组拆分字符串[重复]
【发布时间】:2018-12-29 13:10:59
【问题描述】:

我有类似这样的 ab 数组:

const operators = ['<','>','>=','<>','=']

还有一个类似这样的字符串:

const myStr = 'Some Operand > Some Other Operand'

正如您在此字符串中看到的,我在运算符数组中存在&gt; 字符现在我想根据数组中存在的运算符字符拆分字符串。我知道我可以用正则表达式做到这一点,但我不知道该怎么做

【问题讨论】:

  • @T.J.Crowder 我更新了我的问题,但这只是为了知道是分裂的,或者以前有人这样做过。
  • 没有正则表达式:operators.reduce((sum, op) =&gt; [].concat(...sum.map((str) =&gt; str.split(op))), [myStr])

标签: javascript arrays


【解决方案1】:

您可以在正则表达式中使用竖线定义alternation(&lt;|&gt;|&gt;=|&lt;&gt;|=),这将匹配指定的模式之一(您的运算符)。

您可以将正则表达式传递给split() function

function f(s) { return s.split(/(<>|>=|>|<|=)/); }
console.log(f("Some Operand > Some Other Operand"));
console.log(f("Some Operand >= Some Other Operand"));

编辑: 在上面的正则表达式中,我首先编写了 2 字符运算符,然后是单字符运算符。这样,它将正确匹配所有运算符。您甚至可以使用optionals 来简化正则表达式:

function f(s) { return s.split(/(<>?|>=?|=)/); }
console.log(f("Some Operand > Some Other Operand"));
console.log(f("Some Operand >= Some Other Operand"));

如果您有兴趣在不使用正则表达式的情况下执行此操作,可以查看使用 splitjoin 函数的 this answer

【讨论】:

  • "请注意,我在运算符模式周围添加了空格,因此您不需要修剪操作数。" 两个问题:1. require 运算符周围有空格,以及 2。这并不意味着 OP 不必修剪,因为它不处理多个空格。
  • 你说的很对,谢谢。由于原始帖子未提及空格/修剪,因此我也会将其从答案中删除。
  • @juzraai 删除空格后如果字符串包含&gt;= 它会与&gt; 拆分,如果字符串包含&gt;=&gt;= 而不是&gt;,我该怎么办?
  • 哦,我明白了。请参阅我编辑的答案。我更改了正则表达式中运算符的顺序。我还提供了一个简化的模式。
猜你喜欢
  • 2016-03-22
  • 2016-12-31
  • 2022-01-20
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
相关资源
最近更新 更多