如何用正则提取首个连字符分隔字符串的左右两侧内容
仅按首个连字符拆分字符串的实现方案
你不需要在全量拆分后手动拼接右侧内容,以下两种写法都可以直接得到预期结果:
- 方法1:利用
split原生参数(最简实现)
JavaScript的split()方法支持传入第二个参数limit,用于限制返回的分割片段最大数量。将该值设为2时,只会在第一个匹配到分隔符的位置完成拆分,字符串后续位置的连字符不会被当作分隔符处理:const targetStr = "32 - This-may-contain - hypen-as-well"; const splitResult = targetStr.split("-", 2); // splitResult 结果:["32 ", " This-may-contain - hypen-as-well"] - 方法2:正则匹配实现(适配自定义规则场景)
如果后续需要给分隔符加额外匹配规则(比如要求连字符前后必须带空格),可以用正则捕获首个连字符后的全部内容,完成拆分:const targetStr = "32 - This-may-contain - hypen-as-well"; // 正则逻辑:匹配第一个-,捕获其后所有内容,s修饰符支持匹配换行符 const splitResult = targetStr.split(/-(.*)/s).filter(Boolean); // splitResult 结果:["32 ", " This-may-contain - hypen-as-well"]
之前写法的问题:直接调用
split("-")未传入限制参数时,方法会遍历整个字符串,匹配所有符合的连字符做拆分,因此会把右侧内容里自带的连字符一并切断。
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

