suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – (?=exp) positive Vorhersage-Lookahead-Behauptung mit Nullbreite, wie man sie verwendet und warum sie nicht funktioniert

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

Ich erwarte, 123 in width="123" aus einem String zu extrahieren

Lass mich dir zuerst sagen, was mir einfällt. Aber diese Operation fühlt sich seltsam an. Gibt es eine coole Möglichkeit

Verwenden Sie Ersetzen und erhalten Sie es im Rückruf

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

Oder wie @ars_qu

'<img abc 123 width="168" height="300"'.match(/width="\d+"/)[0].match(/\d+/)[0]
阿神阿神2808 Tage vor726

Antworte allen(5)Ich werde antworten

  • 高洛峰

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

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

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

    Antwort
    0
  • 習慣沉默

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

    JS不支持反向预查

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

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

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

    标准做法 - 捕获组

    使用正则的捕获是你这种场景下的最优方法。

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

    Antwort
    0
  • 大家讲道理

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

    用捕获,取RegExp.$1
    var str = '<img abc 123 width="168" height="300"/>';
    var reg = /.*(width\=\"(.*)\")\s.*/
    reg.test(str)
    console.log(reg.test(str), RegExp.$1, RegExp.$2) 

    Antwort
    0
  • 我想大声告诉你

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

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

    Antwort
    0
  • 高洛峰

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

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

    Antwort
    0
  • StornierenAntwort