问候。
我有一个功能,可以查看“价格”字段的内容并更新“购物车”字段中的字符串。在“cart”字段中,字符串在|之间字符被“价格”中输入的内容替换。我当前的功能只能工作一次,而连续的更改没有任何反应。我知道这不是事件本身的问题,因为如果我在没有正则表达式的情况下替换整个字段,它可以正常工作。
这是“购物车”字段的格式,15需要替换为“价格”字段中的内容: {nicepaypal:cart | 15 | 2010年新增} 。
$('price').addEvent('keyup', function() {
var price = $(this).value;
var currentCartValue = $('cart').value;
var oldPrice = String(currentCartValue.match(/\|...\|/));
oldPrice = oldPrice.substring(1, oldPrice.length-1); // ugly but could not get lookaheads for "between" characters to work properly
var newCartValue = currentCartValue.replace(oldPrice, price);
$('cart').value = newCartValue;
});
另一种变体也不起作用:
newCartValue = currentCartValue.replace(/\|...\|/), '|'+price+'|');
为什么在“价格”字段中多次按键不起作用。谢谢。
答案 0 :(得分:5)
您需要将g
(全局)标志添加到正则表达式。
newCartValue = currentCartValue.replace(/\|...\|/g, '|'+price+'|');
答案 1 :(得分:2)
String.replace
默认只替换第一个实例。使用正则表达式时,可以通过使用全局(g
)标志来更改此设置。请参阅第一个示例中使用下面的g
标记。
// replace globally
var str1 = "A man is a man is a man."
str1 = str1.replace(/man/g, "woman");
alert(str1);
// replaced only once
var str2 = "A dog is a dog is a dog."
str2 = str2.replace("dog", "cat");
alert(str2);
答案 2 :(得分:2)
您必须确保 | 之间始终只有 3 个字符。
假设价格应该总是一个数字(可能是一个浮点数),你不能把它改成
newCartValue = currentCartValue.replace(/\|\d+\.*\d*\|/g, '|'+price+'|');
?
如果您不想查看号码,请尝试此
newCartValue = currentCartValue.replace(/\|.*?\|/g, '|'+price+'|');
?
之后的.*
非常重要,因为它确保它匹配 | 之间的所有字符,并且内部不会找到 |