【问题标题】:First letter using RegEx of string in JavaScript在 JavaScript 中使用字符串正则表达式的第一个字母
【发布时间】:2019-11-28 17:59:26
【问题描述】:

我有一串全名。
从字符串到每个单词的第一个字母。我可以只使用 RegEx

从字符串中获取前两个单词的两个字母吗

预期结果是 KC 仅使用 RegEx

var str = "Keanu Charles Reeves";
console.log(str);
str = str.match(/\b(\w)/g).join('').substring(0, 2);
console.log(str);

【问题讨论】:

  • 那么问题出在哪里?你的意思是你想得到KeCh作为结果?
  • @WiktorStribiżew 只能通过 RegEx 做到这一点吗?只需要KC
  • 除非你使用.replace,否则你不能。类似s.replace(/[^]*?\b(\w)\w*\W+(\w)[^]*|[^]+/, '$1$2')
  • @WiktorStribiżew 是的,这就是我要找的唯一 RegEx 谢谢

标签: javascript regex string


【解决方案1】:

你的方法是最好的,你应该坚持下去。

作为仅限教育的替代方案,您可以使用基于.replace 方法的解决方案(因为所有匹配方法都需要加入多个您想要避免的匹配项,原因是您无法在一个匹配操作中将不相交(不相邻)的文本片段匹配到单个组中):

s.replace(/[^]*?\b(\w)\w*\W+(\w)[^]*|[^]+/, '$1$2')

它将字符串匹配到第 1 组捕获的第一个单词 char,匹配到第 2 组捕获其第一个单词 char 的第二个单词,然后将所有字符串匹配到末尾,或者 - 如果不匹配 - [^]+ 抓取整个字符串,并将整个字符串替换为第 1 组和第 2 组的内容。

regex demo

【讨论】:

  • 哪个最好使用 RegEx 替换或加入子字符串?
  • @JayVaghasiya 多重匹配+加入非常清晰/可读/可维护,因此更可取。
【解决方案2】:

正如你写的.substring(0,2),它只需要前两个字母,只需删除它就可以了

var str = "Keanu Charles Reeves";
console.log(str);
str = str.match(/\b(\w)/g).join('');
console.log(str);

【讨论】:

  • 只需要KC并且只使用RegEx
【解决方案3】:

var str = "Keanu Charles Reeves";
str = str.replace(/(\w).*? (\w).*/, "$1$2");
console.log(str);

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2013-03-09
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多