replace() 方法不替换任何东西
replace() Method don't replace anything
在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®ion');
amazon®ion
没有被替换。这段代码有什么问题?
更新:
解决方法:
var str = escape(cup[number][9]);
str=str.replace('amazon%AEion','amazon%26ampregion');
str=unescape(str);str=str.replace('ampregion','region');
我猜您正在查看 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®ion');
console.log(cup[number][9]);
console.log(str);
这将为您提供以下输出:
marketplace=amazon®ion
marketplace=amazon®ion
如果您正在查看 cup[number][9]
,您会看到原始字符串。如果您查看 str
,您会看到新字符串,因为 str
是唯一被赋予新值的东西。
如果你想修改数组中的值,你必须直接重新赋值,你可以跳过整个str
部分:
cup[number][9] = cup[number][9].replace('amazon®ion','amazon®ion');
console.log(cup[number][9]);
现在它将具有您的新值。
替换时必须使用 URL 编码语法:
str=str.replace('amazon®ion','amazon&region');
这是一个 JSFiddle https://jsfiddle.net/sqqfrgb0/1/
即使它的有效语法是 ®
它仍然将它识别为 ®
所以这就是为什么你需要用 &
而不是 &
更新:
var str = encodeURI(cup[number][9]);
str = decodeURI( str.replace( encodeURI('amazon®ion'), encodeURI('amazon&region') );
encodeURI() & decodeURI()
- 既然是url,这就是有利的功能
- 使用
encodeURI('amazon®ion')
您不必再猜测编码字符
&
in amazon®ion
需要采用 &
的形式,例如: amazon&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&region');
document.write( newURI )
jsFiddle: http://jsfiddle.net/cbsL9ed7/4/
在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®ion');
amazon®ion
没有被替换。这段代码有什么问题?
更新:
解决方法:
var str = escape(cup[number][9]);
str=str.replace('amazon%AEion','amazon%26ampregion');
str=unescape(str);str=str.replace('ampregion','region');
我猜您正在查看 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®ion');
console.log(cup[number][9]);
console.log(str);
这将为您提供以下输出:
marketplace=amazon®ion
marketplace=amazon®ion
如果您正在查看 cup[number][9]
,您会看到原始字符串。如果您查看 str
,您会看到新字符串,因为 str
是唯一被赋予新值的东西。
如果你想修改数组中的值,你必须直接重新赋值,你可以跳过整个str
部分:
cup[number][9] = cup[number][9].replace('amazon®ion','amazon®ion');
console.log(cup[number][9]);
现在它将具有您的新值。
替换时必须使用 URL 编码语法:
str=str.replace('amazon®ion','amazon&region');
这是一个 JSFiddle https://jsfiddle.net/sqqfrgb0/1/
即使它的有效语法是 ®
它仍然将它识别为 ®
所以这就是为什么你需要用 &
而不是 &
更新:
var str = encodeURI(cup[number][9]);
str = decodeURI( str.replace( encodeURI('amazon®ion'), encodeURI('amazon&region') );
encodeURI() & decodeURI()
- 既然是url,这就是有利的功能
- 使用
encodeURI('amazon®ion')
您不必再猜测编码字符 &
inamazon®ion
需要采用&
的形式,例如:amazon&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&region');
document.write( newURI )
jsFiddle: http://jsfiddle.net/cbsL9ed7/4/