如何用多个字符替换字符串中的char

时间:2016-07-23 22:51:21

标签: javascript jquery string date

我想用多个值更改字符串中的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));

5 个答案:

答案 0 :(得分:4)

你可以试试这个:

"%m/%d/%Y".replace(/%([^%])/g,"$1$1")

希望这一点。

答案 1 :(得分:3)

您可以使用正则表达式:

&#13;
&#13;
var date_format="%m/%d/%Y";
var res = date_format.replace(/%(.)/g, "$1$1");

console.log(res);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

&#13;
&#13;
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;
&#13;
&#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。除非你必须在今晚的某个时候完成任务,否则无论你正在尝试什么都不行,而且它已经接近午夜了,你就累了......好吧,不。使用正则表达式。真。抵制诱惑,避免找到正则表达式解决方案。当你早上在办公桌上醒来,错过了你的截止日期,然后回家并花更多的时间陪伴你的家人时,你会很高兴你能做到这一点,这得益于你的慷慨遣散费。