javascript - (?=exp)零宽度正预测先行断言,怎么用,为什么出不来效果
阿神
阿神 2017-05-19 10:27:51
0
5
687

'<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)d+/。 注意多了一个小于号。
如果你想找width前面的数字,比如字符串是这样的"168width",这是用到的是正向预查,写法为 /d+(?=width)/如果你想找width前面的数字,比如字符串是这样的"168width",这是用到的是

正向预查

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

标准做法 - 捕获组

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

雷雷

我想大声告诉你

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

小葫芦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板