我需要基于动态分隔符拆分一个数组,该分隔符将更改,并将分隔符保留在结果数组中.

考虑下面的例子,我需要:

  • 拆分const match = 'somethingcatsomethingcatsomethingcat'

  • 使用分离器const separator = 'cat'

  • 并得到以下数组作为结果:["something", "cat", "something", "cat", "something", "cat"].

我是这么做的:

const separator = 'cat'
const match = 'somethingcatsomethingcatsomethingcat'

const standardSplit = match.split(separator)
console.log(standardSplit)
// >> Array ["something", "something", "something", ""]

const withPureRegex = match.split(/(cat)/)
console.log(withPureRegex)
// >> Array ["something", "cat", "something", "cat", "something", "cat", ""]
// This is what I need, without the last element of an empty string.
// But I need to pass in the separator dynamically.

const regex = new RegExp(`/(${separator})/`, 'gi')
const withStringLiteral = match.split(regex)
console.log(withStringLiteral)
// >> Array ["somethingcatsomethingcatsomethingcat"]

我对正则表达式不在行.我已经读了大约articles篇关于在正则表达式中逃逸的文章,但似乎在RegExp以内没有必要?我try 了RegExp的许多变种,但都没有成功.

关于这一点有很多问题,但我发现try 使用动态分隔符的问题很少.我发现的少数几个问题都有使用字符串文字的答案,还有RegExp个问题,就像我上面的一样.

如果我只需要这样做一次,我会使用非正则表达式方法,比如使用上面的前split个方法,然后根据需要手动循环插入分隔符.但在这种情况下,我将多次运行此匹配/替换,如果可以避免,则不能增加更多开销.

推荐答案

您可以使用.filter(Boolean)删除最后一个空项.

Demo:

const match = 'somethingcatsomethingcatsomethingcat';
const separator = 'cat';

const reg = new RegExp(`(${separator})`, 'g');
const resArr = match.split(reg).filter(Boolean);

console.log(resArr);

Javascript相关问答推荐

使用JavaScript/PHP将二维码保存为服务器端的图像

React Hooks中useState的同步问题

从PWA中的内部存储读取文件

react/redux中的formData在expressjs中返回未定义的req.params.id

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

微软Edge编辑和重新发送未显示""

扫描qr code后出错whatter—web.js

为什么ngModel不能在最后一个版本的Angular 17上工作?'

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

基于props 类型的不同props ,根据来自接口的值扩展类型

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

面对代码中的错误作为前端与后端的集成

将基元传递给THEN处理程序

如何找到带有特定文本和测试ID的div?

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

select 2-删除js插入的项目将其保留为选项

TypeORM QueryBuilder限制联接到一条记录

如何压缩图像并将其编码为文本?