【问题标题】:Regex get the middle section of each word javascript正则表达式获取每个单词javascript的中间部分
【发布时间】:2016-04-15 06:43:00
【问题描述】:

所以基本上我要做的是遍历 html 文档中的每个单词,并将每个单词的第一个字母替换为“A”,第二个 - 倒数第二个字母替换为“b”,最后一个字母替换为“ c',完全取代了这个词。我不确定正则表达式是否是执行此操作的方法(我应该改为使用 for 循环并检查每个字符吗?)但是我还是会问。

目前我在做:

document.body.innerHTML = document.body.innerHTML.replace(/\b(\w)/g, 'A'); 获取每个单词的首字母

document.body.innerHTML = document.body.innerHTML.replace(/\w\b/g, 'c'); 获取每个单词的最后一个字母

因此,如果我有字符串:Lorem ipsum dolor sit amet,我目前可以将其设为 Aorec Apsuc Aoloc Aic Amec,但我想在 javascript 中使用 Abbbc Abbbc Abbbc Abc Abbc

非常感谢任何帮助 - 正则表达式真的让我感到困惑。

【问题讨论】:

  • 你为什么不直接计算每个单词的长度,根据需要用尽可能多的 bbb 构建新单词?
  • @rock321987 嗯,是的,我没有想到这一点 - 我可能会遍历并删除包含 3 个或更少字符的单词
  • @RaphaelMüller - 是的可能应该走那条路(因此我在问题中提到了循环)但是我一直(试图)从 Treehouse 学习正则表达式,并且对你将如何去做很感兴趣它:)

标签: javascript html regex string


【解决方案1】:

你几乎明白了。

str = "Lorem ipsum dolor sit amet"

str = str
  .replace(/\w/g, 'b')
  .replace(/\b\w/g, 'A')
  .replace(/\w\b/g, 'c')

document.write(str);

更高级的替换规则可以通过回调函数来处理,例如

str = "Lorem ipsum dolor sit amet"

str = str.replace(/\w+/g, function(word) {
  
  if (word === "dolor")
    return word;
  
  return 'A' + 'b'.repeat(word.length - 2) + 'c';

});

document.write(str);

【讨论】:

  • 谢谢,这与我的问题没有直接关系,但只是出于兴趣,如果我想从我的替代品中排除“dolor”,我将如何在多步正则表达式中做到这一点声明?
猜你喜欢
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2013-04-02
相关资源
最近更新 更多