2013-05-07 141 views
0

我想查找并替换字符串中存在的字符串的一部分。在javascript中查找并替换带点的字符串

字符串就像'1.png,2.png,3.jpg,4.gif'

我想找到这个字符串1.png,然后,如果存在与1.jpg更换。

我无法使用search()indexOf()方法找到它。

由于我无法找到它,我无法替代它。

我想这样

var str = '1.png' 
var new_str = '1.jpg' 
var main_str = '1.png,2.png,3.jpg,4.gif'; 

if(main_str.indexOf(str) > 0){ 
alert('found') 
// now replace it with new_str 
} 
else{ 
alert('not found') 
} 

我已经试过以下组合,但这些都没有工作。

main_str.indexOf('str') > 0 
main_str.indexOf(/\str/) > 0 
main_str.indexOf(/\"str"/) > 0 
main_str.indexOf(str) > 0 

请参阅并建议任何可能的方法来做到这一点。

感谢

回答

1

1.png在字符串中的指数实际上是0,这就是为什么你的条件失败。正确的方法是检查索引是否不为负,因为indexOf返回-1,如果子没有找到:

if(main_str.indexOf(str) >= 0){ 

但在这里更好的办法是使用replace

main_str.replace(str, new_str) 
1

你可以使用replace更换:

main_str = main_str.replace(str, new_str) 

如果您要更换出现了多次,使用

main_str = main_str.replace(new RegExp(str,'g'), new_str) 

如果你想更换前提醒,这样做:

var r = new RegExp(str,'g'); 
if (main_str.match(r)) { 
    alert('found') 
    main_str = main_str.replace(r, new_str) 
} else { 
    alert('not found') 
} 
+0

我需要更换之前进行确认。 – 2013-05-07 07:37:29

+0

@TallboY:你想确认什么? – 2013-05-07 07:39:02

1

由于main_str包含索引为0的1.png,因此您永远无法通过检查main_str.indexOf('str') > 0找到它。记住,如果没有找到并且不为零,那么javascript返回-1。所以你必须更新您的条件:

main_str.indexOf('str') != -1 
1

尝试,

var str="1.png,2.png,3.jpg,4.gif"; 
var newStr=str.replace(".png",".jpg"); 
1

可以使用替代方法:

var str = '1.png,2.png,3.jpg,4.gif'; 
var result=str.replace('1.png','1.jpg') 
1

,你可以这样做:

var str = "1.png,2.png,3.jpg,4.gif"; 
var re = /(.png)/i; 
var found = str.match(re); 

//now ask the user or do whatever else is needed 
if (found){ 
    found = confirm("Really overwrite"); 
} 

if (found){ 
    str = str.replace(re, ".jpg"); 
} 

我现在允许在字符串中还大写或混合的情况下,像".Png"".PNG"