需求场景:提取百度ueditor中的所有样式中背景图片的地址;
百度ueditor,这里就不多说了,很强大的编辑器,我们知道,百度ueditor中所有的样式都是内联样式,api中可以获取整个html字符串。ok,举个栗子,比如酱样紫:
我要提取的就是所有内联样式中的
url()
里面的内容,下面上代码:
var reg = /url\((\S*)\)/g, ret = [];
function pick(str){
while(arr = reg.exec(str)) ret.push(arr[1]);
return ret;
}
pick(str);
//str就是要提取的字符串
这里估计有人会问,match()方法不是直接可以取出么?
好,我要说的重点也是这里:
js里的match方法在正则/g模式下,没办法取到分组结果,比如说这样的结果没法去掉两个特定的字符串的:
Why? 你真的了解
match()
方法么?我们先来打印一下不带 g 是什么样子的。
我们看到它返回一个数组,数组中有两项,分别是带特定字符串和不带特定字符串的,一般如果只有全局只有一个的话,我们可以直接使用
str.match(/url\((\S*)\)/)[1];
//这样取出来的自然是不带特定字符串的
巴特!很多时候这两个特定字符串会出现很多次,就比如我这个应用场景,那就可以使用我上面的方法去破解。