javascript - (?=exp)零寬度正預測先行斷言,怎麼用,為什麼出不來效果
阿神
阿神 2017-05-19 10:27:51
0
5
673

'<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]
阿神
阿神

闭关修行中......

全部回覆(5)
小葫芦

js 對斷言支援很差,直接用配對組就好了:

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

JS不支援反向預查

它目前支援零寬斷言的正向預查,即找出屁股後跟著指定詞(或其他條件)結尾的文本。 --JS目前支援;

你問題中的需求想要找 前面有指定字(或其他條件)的文字。 --JS目前不支援.

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

正向預查

,寫法為/d+(?=width)/

標準做法 - 捕獲組

🎜使用正規的捕捉是你這種場景下的最優方法。 🎜
'<img abc 123 width="168" height="300"'.match(/width="(\d+)/)[1];  //输出168
我想大声告诉你

直接width=".*?"然後符合數字不行嗎

小葫芦

js好像不支援部分正規則,例如零寬斷言....

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!