You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS正则如何匹配含&特殊字符的子串并捕获指定命名分组

JS正则匹配Section分组修正方案

原有正则匹配失败的核心问题:(?<section_1>\w+)仅支持匹配单个单词字符序列,遇到&就会终止,既没有覆盖后续重复的 & {word}结构,也未明确以|作为section_1的匹配终止边界。

可用正则

标准场景(匹配给出的3种固定格式)

/Section_1:\s*(?<section_1>\w+(?:\s*&\s*\w+)*)\s*\|\s*section_2:\s*(?<section_2>.*)/

兼容场景(支持section_2字段缺失的情况)

如果存在仅含Section_1、无后续|和section_2的输入,将后半段改为可选分组即可:

/Section_1:\s*(?<section_1>\w+(?:\s*&\s*\w+)*)(?:\s*\|\s*section_2:\s*(?<section_2>.*))?/

逻辑说明

  • Section_1:\s*:匹配Section_1:前缀及后续任意空白
  • (?<section_1>\w+(?:\s*&\s*\w+)*):section_1命名分组
    • \w+匹配Section_1后的第一个单词(如示例中的hello)
    • (?:\s*&\s*\w+)*为非捕获分组,匹配0到多次「两侧带可选空白的& + 后续单词」结构,完全覆盖0个及以上& {word}拼接的需求
  • \s*\|\s*:匹配|分隔符及两侧空白,明确section_1的内容边界,不会越界匹配后续内容
  • section_2:\s*:匹配section_2:前缀及后续空白
  • (?<section_2>.*):捕获section_2后的所有剩余内容

匹配结果

三个测试用例的捕获结果完全符合预期:

  1. 输入Section_1: hello & goodbye | section_2: kuku:section_1="hello & goodbye",section_2="kuku"
  2. 输入Section_1: hello & goodbye & hola | section_2: kuku:section_1="hello & goodbye & hola",section_2="kuku"
  3. 输入Section_1: hello | section_2: kuku:section_1="hello",section_2="kuku"

如果需要兼容Section前缀大小写不一致的场景,在正则末尾加i修饰符开启不区分大小写匹配即可。

内容的提问来源于stack exchange,提问作者MayAsk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:45:29