replace()方法不替换任何东西

时间:2015-04-16 20:08:01

标签: javascript multidimensional-array str-replace

cup[number][9]中:

 //ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=US&source=ac&ref=tf_til&ad_type=product_link&tracking_id=nameid-20&marketplace=amazon®ion=US&placement=B004BCXAM8&asins=B004BCXAM8&linkId=SK5UG2J5CK4WNOKE&show_border=true&link_opens_in_new_window=true

这是我的代码:

var str   = cup[number][9];
str=str.replace('amazon®ion','amazon&region');

amazon®ion未被替换。这段代码有什么问题?

更新

解决:

var str = escape(cup[number][9]);
str=str.replace('amazon%AEion','amazon%26ampregion'); 
str=unescape(str);str=str.replace('ampregion','region');

3 个答案:

答案 0 :(得分:2)

我猜你在看cup[number][9]并且发现它没有改变。这是因为您只修改了str变量的值,而不是cup[number][9]

由于您将str重新分配给全新字符串,因此不会影响str过去指向的对象。

当您处理面向对象的代码时,必须小心这个概念。如果你有两个指向同一个对象的变量,重新分配其中一个变量将不会重新分配另一个变量。

修改

这里有一些代码。让我们删除该字符串中的一些令人分心的东西,然后执行以下操作:

var number = 0;
var cup = [];
cup[number] = [];
cup[number][9] = "marketplace=amazon®ion";
var str = cup[number][9];
str=str.replace('amazon®ion','amazon&region');

console.log(cup[number][9]);
console.log(str);

这将为您提供以下输出:

marketplace=amazon®ion
marketplace=amazon&region

如果您正在查看cup[number][9],则会看到原始字符串。如果您查看str,您会看到新字符串,因为str是唯一获得新值的内容。

如果你想修改数组中的值,你必须直接重新分配它,你可以跳过整个str部分:

cup[number][9] = cup[number][9].replace('amazon®ion','amazon&region');
console.log(cup[number][9]);

现在它将有你的新价值。

答案 1 :(得分:1)

<强>更新

var str   = encodeURI(cup[number][9]);
str = decodeURI( str.replace( encodeURI('amazon®ion'), encodeURI('amazon&amp;region') );

encodeURI()&amp; decodeURI()

  • 由于这是一个网址,这是一个有利的功能
  • 使用encodeURI('amazon®ion')您无需猜测编码字符
  • &中的
  • amazon&region需要采用&amp;的形式,如下所示:amazon&amp;region
  • 使用decodeURI()来使用新URI

JsFiddle:http://jsfiddle.net/cbsL9ed7/2/


想要一个更好,更灵活的解决方案吗?

为什么不把它变成一个功能?

function updateURI(uri, oldValue, newValue) {
    var str = encodeURI( uri );
    str = decodeURI( str.replace( encodeURI(oldValue), encodeURI(newValue) ) );
    return str;
}


var newURI = updateURI(cup[number][9], 'amazon®ion', 'amazon&amp;region');
document.write( newURI )

jsFiddle:http://jsfiddle.net/cbsL9ed7/4/

答案 2 :(得分:0)

替换它时必须使用URL编码语法:

str=str.replace('amazon®ion','amazon&amp;region');

这是一个JSFiddle https://jsfiddle.net/sqqfrgb0/1/

尽管有效的语法是&reg;,但它仍然将其识别为®,因此您需要替换为&amp;而不是& < / p>