我有个需求那就是要在所有字符串中提取出xx.png或者通过拼接(“icon_+xxx+_+xxxx…+_png)的png资源
不会正则就用js的split方法,可以把字符串截取为数组,实际上这个用split更好,正则用来匹配和截取其中的一两个特别的字符串像id,username这些比较有用,另外你要帮写正则就给个匹配的实例,你的那个什么"XXX+XXX+XXX+XXX"这种就用splite就行了
var str = "aaa+bbb+ccc+ddd";
var array = str.split("+");
console.log(array[0]) //aaa
console.log(array[1]) //bbb
console.log(array[2]) //ccc
console.log(array[3]) //ddd
更复杂的就需要正则了 正则只要我要看出模式才行,这个什么.png在什么位置,前面大概是什么字符,你的描述太模糊,怎么给写正则@wenshiqi0 然后我的思路就是第一步先去除本地的所有png资源并将其存在一个数组中,再读取目录中的所有文件把其所有的资源都读出来,然后在逐个读出png资源并将其存在另一个数组,最后两个数组再做匹配如果发现两个数组是有相同的png的话就将其输出并删除。
@wenshiqi0 还有一种形式就是以字符串拼接形式出现。如this.ui(“iconSpr”).startLoad1(“icon_skill_"+this.model.getValue(“cId”)+"“+"icon_skill_"+d[“idx”]+”png”); 这样子的形式,我要做是把icon_skill+这样子的子字符串都提取出来,然后再进行匹配,比如我的读取的本地资源有[‘abc.png’,’] 然后读取出来的文件资源有[[‘a.png’,’b.png’]], 用instanceof 判断当数组[‘a.png’,’b.png’],所有的元素都是true的话才算是相等的。然后就将abc.png输出并在本地删除
var str = 'gui/common/profile_back.png';
var reg = /^[a-zA-Z0-9\.\/\\\-\:]*\/([a-zA-Z0-9\_]*).png$/;
var res = reg.exec(str);
console.log(res[1]); //profile_back
console.log(res[1]+'.png') //profile_back.png
这是我写的源代码,测试了的,你试试@wenshiqi0 对啊,因为一个文件都是囊括这些所有会出现的情况,所以我也觉得一开始是用spite分割肯定不行。只能是通过正则法则或者字符串遍历啥的。但是我想到这里都没有思路了,正则我弄了半天都写不来这东西。
@wenshiqi0 那我这样子问吧,startLoad(“icon_skill_"+this.model.getValue(“cId”)+"“+d[“idx”]+"_png”) 就举这个代码粒子,就是怎么用正则来 获取以类似这种形式(就是后面是含有”png"))的括号里面所有类似icon_skill的字符串
@wenshiqi0 就是比如 icon_skill_sky.png 这就是有可能出现的一种形式, 也就是以 字符串_字符串…png 但是在字符串和字符之间有可能是存在带有变量的表达式,所以这些都是要考虑进去的情况,就如startLoad(“icon_skill"+this.model.getValue(“cId”)+"“+d[“idx”]+"_png”) 在这个代码我只需要提取出icon_skill_png就行了,其他的带有参数的表示就不用管他了,你看看有没有啥正则可以直接提取出类似这样格式下字符串
先前回答有点问题 这个应该可以了把
var target = 'icon_skill';
var target1 = 'icon_wrong';
var postfix= '_png';
var str = 'icon_skill_haha_nono_fafa_png';
var reg = new RegExp('^'+target+'[a-zA-Z\\_]*'+postfix+'$');
var reg1 = new RegExp('^'+target1+'[a-zA-Z\\_]*'+postfix+'$');
var res = reg.exec(str);
console.log(res[0]); //icon_skill_haha_nono_fafa_png
res = reg1.exec(str);
console.log(res); //null