V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
ljsh093
V2EX  ›  JavaScript

iOS JS 零宽断言的正则问题

  •  
  •   ljsh093 · 2021-11-20 12:43:26 +08:00 · 2306 次点击
    这是一个创建于 1099 天前的主题,其中的信息可能已经有所发展或是发生改变。

    互联网搜索了一波,发现这东西就是会触发异常,那么像前置零宽断言这种语句可以有什么办法改写吗?本人实在是正则苦手,或者求一波正则学习的方法。

    异常的是

    /(?<=[0-9])x\b/
    

    需要匹配 25x 50x 中的 x

    目前想到的办法是用

    .replace /()()/, '$1 x'
    

    这种办法

    第 1 条附言  ·  2021-11-20 13:55:18 +08:00
    比较烦的是为了兼容 iOS 需要改写之前的规则,因为都跑不通了😢
    7 条回复    2021-11-20 15:20:27 +08:00
    eason1874
        1
    eason1874  
       2021-11-20 13:01:28 +08:00
    例子少,不知道你想要的是什么

    [0-9] 只匹配一个数字,这样才是匹配两个数字 [0-9]{2}
    ljsh093
        2
    ljsh093  
    OP
       2021-11-20 13:52:58 +08:00 via iPhone
    @eason1874 需要匹配前面是数字并且后面没有东西的中间的 x
    eason1874
        3
    eason1874  
       2021-11-20 14:15:21 +08:00
    搜了下,貌似是 iOS 不支持断言,别用断言换其他的试试

    比如匹配不捕获 /(?:[0-9])x\b/

    或者都捕获,通过变量获取匹配内容再处理
    eason1874
        4
    eason1874  
       2021-11-20 14:17:07 +08:00
    如果 \b 也不支持,就给 x 也写个匹配规则
    lin98
        5
    lin98  
       2021-11-20 14:44:41 +08:00   ❤️ 1
    @eason1874 看了下文档,iOS 应该是支持 (?<=subexpression )(正回顾后发断言)的
    lin98
        6
    lin98  
       2021-11-20 15:13:34 +08:00
    像一楼说的一样,你这个只能匹配一位数字,如果确定是两位数字 /(?<=[0-9]{2})x\b/. 否则可以 /(?<=[0-9]+)x\b/
    ljsh093
        7
    ljsh093  
    OP
       2021-11-20 15:20:27 +08:00 via iPhone
    @lin98
    @eason1874
    感谢各位,我这个情景是前面必定是数字,所以匹配一位就够了,主要还是断言的问题,我再学习下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:05 · PVG 18:05 · LAX 02:05 · JFK 05:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.