V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shubei
V2EX  ›  程序员

请问正则表达式(js),用$n 表示匹配到的部分,有办法突破 n 只能取 0-99 的限制吗

  •  
  •   shubei · 2021-12-30 15:51:59 +08:00 · 1296 次点击
    这是一个创建于 847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    12 条回复    2021-12-31 12:56:04 +08:00
    66beta
        1
    66beta  
       2021-12-30 16:08:40 +08:00
    给我整不会了,代码贴一下吧
    dethan
        2
    dethan  
       2021-12-30 16:32:40 +08:00 via Android
    会写这么长的表达式吗?
    shubei
        3
    shubei  
    OP
       2021-12-30 16:38:04 +08:00
    @66beta 不用代码呀,就是正则表达式可以$0 表示匹配到的部分, $n 表示用()包裹的 part ,实际使用发现只能用到$99
    shubei
        4
    shubei  
    OP
       2021-12-30 16:39:52 +08:00
    @dethan 一个富文本搜索的功能,用根据搜索词动态生成正则(过滤各种 html 标签)的办法搞得,目前没有长度显示
    66beta
        5
    66beta  
       2021-12-30 16:43:31 +08:00
    说说你要干啥吧,不要纠结语言本身的功能
    jifengg
        6
    jifengg  
       2021-12-30 16:46:25 +08:00   ❤️ 1
    shubei
        7
    shubei  
    OP
       2021-12-30 16:49:02 +08:00
    @66beta 大概就是在一个字符串里面搜索:
    比如在 <\span>高<\/span>
    <\span class="del">情<\/span>
    <\span class="del">已<\/span>
    <\span class="title"><\span class="add">逐<\/span><\span class="add">晓<\/span><\/span>
    <\span>云</span>
    <\span>空</span> 搜索’已逐‘


    我目前就是根据搜索词动态生成正则:已(<span[^>]*>|</span>)*逐(<span[^>]*>|</span>)*
    替换成
    <span class='match'>已</span>$1<span class='match'>逐</span>$2
    shubei
        8
    shubei  
    OP
       2021-12-30 16:58:09 +08:00
    @jifengg 我擦 学习了
    66beta
        9
    66beta  
       2021-12-30 17:15:03 +08:00
    '<\span>高<\/span><\span class="del">情<\/span><\span class="del">已<\/span><\span class="title"><\span class="add">逐<\/span><\span class="add">晓<\/span><\/span><\span>云</span><\span>空</span>'.replace(/<[^<\/]*>(?=[已|逐])/gmi, '<\span class="match">')

    =>

    '<span>高</span><span class="del">情</span><span class="match">已</span><span class="title"><span class="match">逐</span><span class="add">晓</span></span><span>云</span><span>空</span>'
    shubei
        10
    shubei  
    OP
       2021-12-30 17:28:15 +08:00
    @66beta emm 正则新手,没看懂这个怎么把 match 的类加到前面的。但是应该是少了后 span 标签。

    主要是已逐是作为一个词搜索的,不是或的关系
    lululau
        11
    lululau  
       2021-12-30 18:47:09 +08:00
    s.replace(REGEX, (_, ...g) => g[123]))
    IvanLi127
        12
    IvanLi127  
       2021-12-31 12:56:04 +08:00 via Android
    设计者可能死都想不通你咋能用得了那么多😂

    你这样用性能没问题吗😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3171 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:33 · PVG 22:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.