有关正则表达式进行字符串分割的一个问题

一、问题描述

当使用带有捕获分组的正则表达式进行字符串分割时,分隔符会被保留在结果数组中,并作为数组的一部分返回。

s = `abc

def


ghi
`

比较两种正则表达式分割方式:

第一种:s.split(/(\n)+/)

第二种:s.split(/\n+/)

两种分割方式对应两种结果:

第一种: ['abc', '\n', 'def', '\n', 'ghi', '\n', '']

第二种:['abc', 'def', 'ghi', '']

二、解释:

当使用 /(\n)+/作为分隔符时,括号 (\n)表示一个捕获分组,+表示匹配前面的表达式一次或多次。因此,(\n)+表示匹配一个或多个连续的换行符。

在JavaScript中,当使用带有捕获分组的正则表达式进行字符串分割时,分隔符会被保留在结果数组中,并作为数组的一部分返回。这就是为什么在 s.split(/(\n)+/)中,分隔符 \n会被保留在结果数组中的原因。

如果不希望分隔符被保留在结果数组中,可以使用非捕获分组 (?: ) 来定义正则表达式,例如 /(?:\n)+/。这样就可以实现分隔字符串并且不保留分隔符在结果数组中。

所以第一种方式如果想得到第二种方式同样的结果应该使用非捕获分组 (?: )s.split(/(?:\n)+/)

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风伴月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值