字符串中怎么提取图片文件名
发布于 2天前 作者 iluspan 150 次浏览 来自 问答

我有个需求那就是要在所有字符串中提取出xx.png或者通过拼接(“icon_+xxx+_+xxxx…+_png)的png资源

26 回复

用正则匹配出图片文件名

@idreamshen 怎么用?不会写正则,可以举个例子吗?

不会正则就用js的split方法,可以把字符串截取为数组,实际上这个用split更好,正则用来匹配和截取其中的一两个特别的字符串像id,username这些比较有用,另外你要帮写正则就给个匹配的实例,你的那个什么"XXX+XXX+XXX+XXX"这种就用splite就行了

但是中间的参数怎么写这才是关键,感觉没有思路

@wenshiqi0 可以提供下怎么截取吗?

@iluspan


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命名的一部分呢?这又是个问题啊!

@iluspan 完全不懂你是要干嘛 能不能描述清楚

就是这样子的,我有个需求,就是读取本地的所有png资源,然后在再跟使用过的png资源匹配,如果是使用过的,就将其输出再删除。

@wenshiqi0 就是这样子的,我有个需求,就是读取本地的所有png资源,然后在再跟使用过的png资源匹配,如果是使用过的,就将其输出再删除。

@iluspan 使用过的png和没有使用的有什么区别

@wenshiqi0 然后我的思路就是第一步先去除本地的所有png资源并将其存在一个数组中,再读取目录中的所有文件把其所有的资源都读出来,然后在逐个读出png资源并将其存在另一个数组,最后两个数组再做匹配如果发现两个数组是有相同的png的话就将其输出并删除。

@wenshiqi0 比如我读到的文本内容中有<string>gui/common/profile_back.png</string> 那么profile_back.png就是使用过的

那就用正则了 ^[a-zA-Z0-9\.\/\\\-\:]/([a-zA-Z0-9\_]*).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输出并在本地删除

@wenshiqi0 恩恩谢谢,我试试先。


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 第二种png用过的情况不知道你理不理解我讲的啥?

@wenshiqi0 对啊,因为一个文件都是囊括这些所有会出现的情况,所以我也觉得一开始是用spite分割肯定不行。只能是通过正则法则或者字符串遍历啥的。但是我想到这里都没有思路了,正则我弄了半天都写不来这东西。

@wenshiqi0 那我这样子问吧,startLoad(“icon_skill_"+this.model.getValue(“cId”)+"“+d[“idx”]+"_png”) 就举这个代码粒子,就是怎么用正则来 获取以类似这种形式(就是后面是含有”png"))的括号里面所有类似icon_skill的字符串

@iluspan 你不要用这种代码段来让我拼接啊 你给几个拼接好的列子啊

@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

之前回答的有问题 你看看上面的这个 自豪地采用 CNodeJS ionic

嗯嗯!谢谢啦

回到顶部