搜尋

首頁  >  問答  >  主體

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]
阿神阿神2735 天前679

全部回覆(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
  • 取消回覆