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

4

我可以帮助您将字符串中的一个字符替换为其他值。

我有一个这样的字符串:

date_format = "%m/%d/%Y";

我希望你能够将每个“%”替换为其后的字符,因此日期变量应该像这样:

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个回答

4
你可以尝试这样做:
"%m/%d/%Y".replace(/%([^%])/g,"$1$1")

希望这能帮到您。

3
您可以使用正则表达式来实现此功能:

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

console.log(res);


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));


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');

1
对于我们中的正则表达式挑战者,这是 /%(.)/g, '$1$1' 的翻译:

  • / 表示下一部分将是正则表达式。
  • % 查找一个 %
  • . 任何单个字符,因此 %. 将匹配 %m、%d 和/或 %Y。
  • (.) 将其放在圆括号中意味着捕获要稍后使用的值。
  • /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行代码压缩为一行。除非你必须在今晚完成它,而你所尝试的一切都无法实现,并且已经接近午夜,你感到疲倦...好吧,也不要这样。使用正则表达式。真的。抵制避免找到正则表达式解决方案的诱惑。当你早上在办公桌前醒来时,因为错过了截止日期,你会很高兴回家和家人共度更多时间,这都归功于你慷慨的解雇补偿金。

说笑归说笑,我会尽可能地在任何地方使用正则表达式,特别是如果我可以借鉴别人已经写好的东西。 - BobRodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接