首页  >  问答  >  正文

javascript - (?=exp)零宽度正预测先行断言,怎么用,为什么出不来效果

'<img abc 123 width="168" height="300"'.match(/(?=(width="))168/)

我期望从一个字符串中 取出其中位于width="123" 中的123

我先说一下我能想到的。但是这样的操作都感觉怪怪的。有没有炫酷的方法

使用replace然后在回调里面获取;

'<img abc 123 width="168" height="300"'.replace(/width="\d+"/,function(a){console.log(a)})

或者是如同,@ars_qu 那样

'<img abc 123 width="168" height="300"'.match(/width="\d+"/)[0].match(/\d+/)[0]
阿神阿神2733 天前675

全部回复(5)我来回复

  • 高洛峰

    高洛峰2017-05-19 10:29:51

    js 对断言支持很差,直接用匹配组就好了:

    '<img abc 123 width="168" height="300"'.match(/width="(\d+)"/)[1]

    回复
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:29:51

    JS不支持反向预查

    它目前支持零宽断言的正向预查,即找出屁股后跟着指定词(或其他条件)结尾的文本。 --JS目前支持;

    你问题中的需求想要找 前面有指定词(或其他条件)的文本。 --JS目前不支持.

    P.S.: 即使支持,你的写法也不对! 如果你想找width后的数字,需要用的是反向预查,正确的写法(在C#或PHP中)是
    /(?<=width)d+/。 注意多了一个小于号。/(?<=width)d+/。 注意多了一个小于号。
    如果你想找width前面的数字,比如字符串是这样的"168width",这是用到的是正向预查,写法为 /d+(?=width)/如果你想找width前面的数字,比如字符串是这样的"168width",这是用到的是

    正向预查

    ,写法为 /d+(?=width)/

    标准做法 - 捕获组

    🎜使用正则的捕获是你这种场景下的最优方法。🎜
    '<img abc 123 width="168" height="300"'.match(/width="(\d+)/)[1];  //输出168

    回复
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:29:51

    雷雷

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:29:51

    直接width=".*?"然后匹配数字不行吗

    回复
    0
  • 高洛峰

    高洛峰2017-05-19 10:29:51

    js好像不支持部分正则,比如零宽断言....

    回复
    0
  • 取消回复