我想用多个值更改字符串中的char
我有这样的字符串:
date_format = "%m/%d/%Y";
我想用后面的char替换%,所以日期变量应该是这样的:
date_format="mm/dd/YY";
这是我到目前为止所尝试的内容,但我无法让它工作,所以我需要一些帮助:
function replaceon(str, index, chr) {
if (index > str.length - 1) return str;
return str.substr(0, index) + chr + str.substr(index + 1);
}
function locations(substring, string) {
var a = [],
i = -1;
while ((i = string.indexOf(substring, i + 1)) >= 0) a.push(i);
return a;
}
function corrent_format(date_format) {
var my_locations = locations('%', date_format);
console.log(my_locations.length);
for (var i = 0; i < my_locations.length; i++) {
replaceon(date_format, my_locations[i], date_format[my_locations[i] + 1]);
}
return date_format;
}
console.log(corrent_format(date_format));
答案 0 :(得分:4)
你可以试试这个:
"%m/%d/%Y".replace(/%([^%])/g,"$1$1")
希望这一点。
答案 1 :(得分:3)
您可以使用正则表达式:
var date_format="%m/%d/%Y";
var res = date_format.replace(/%(.)/g, "$1$1");
console.log(res);
&#13;
答案 2 :(得分:1)
function act(str) {
var res = "";
for (var i = 0; i < (str.length - 1); i++) {
if (str[i] === "%")
res += str[i + 1];
else
res += str[i];
}
res += str[i];
return res;
}
var date_format = "%m/%d/%Y";
console.log(act(date_format));
&#13;
答案 3 :(得分:1)
您的代码无效,因为date_format
函数未修改corrent_format
变量。 replaceon
函数返回一个新字符串。如果将结果分配给date_format
,则应获得预期结果:
for (var i = 0; i < my_locations.length; i++) {
date_format = replaceon(date_format, my_locations[i], date_format[my_locations[i]+1])
}
或者,您可以使用String.replace
和正则表达式执行替换:
date_format.replace(/%(.)/g, '$1$1');
答案 4 :(得分:1)
对于我们中受到挑战的正则表达式,这里是/%(.)/g, '$1$1'
的翻译:
/
表示下一部分将是正则表达式。%
找到%
。.
任何单个字符,因此%.
将匹配%m,%d和/或%Y。(.)
将其放入parens意味着捕获稍后要使用的值。/g
获取源字符串中的所有匹配项(而不仅仅是第一个匹配项)。?1
引用我们之前在(.)
。?1?1
重复捕获的值两次。所以,用%.
中的任何内容替换每个.
,乘以两次。
现在,这个正则表达式是完成手头工作的最简洁,最快捷的方式。但也许你不能使用正则表达式。也许你有一个诵读困难的老板,他们禁止使用它们。 (阅读障碍和正则表达最好是不安的伴侣。)也许你还没有在47小时内尖叫正常的表情,这些正常的表情没有做你想要的,在你被允许使用它们之前你需要放入。或许你只是讨厌正则表达式。
如果其中任何一项适用,您也可以这样做:
var x = '%m/%d/%y';
x = x.replace('%', 'm');
x = x.replace('%', 'd');
x = x.replace('%', 'y');
alert(x);
这利用了replace
函数仅替换找到的第一个匹配的事实。
但严重的是,不要使用它。使用正则表达式。最好花20个小时来制作一个正则表达式,将你在15分钟内编写的20行代码浓缩为1。除非你必须在今晚的某个时候完成任务,否则无论你正在尝试什么都不行,而且它已经接近午夜了,你就累了......好吧,不。使用正则表达式。真。抵制诱惑,避免找到正则表达式解决方案。当你早上在办公桌上醒来,错过了你的截止日期,然后回家并花更多的时间陪伴你的家人时,你会很高兴你能做到这一点,这得益于你的慷慨遣散费。