【问题标题】:Is there a way to condense the following regex replace? (javascript) [duplicate]有没有办法压缩以下正则表达式替换? (javascript)[重复]
【发布时间】:2020-02-23 07:21:21
【问题描述】:

我正在尝试从输入字符串的开头和结尾删除空格,用一个空格替换超过 1 个空格删除所有特殊字符。 sn-p(附在此处)有效,但我只是想问一下是否有一种方法可以使它看起来不那么……丑陋?一定有更好的方法来写这个,对吧?

const filterInput = (vals) => {
  console.log(vals.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ').replace(/[^\w ]/g, ""));
};

filterInput(" squid*^%ward     sponge((bob        ")

【问题讨论】:

  • 这个\s+ 到这个' ' 不仅如此,它用空格替换所有空格,并且是摇狗的尾巴。否则,[^\w ]+ 什么都不需要。

标签: javascript node.js regex regexp-replace


【解决方案1】:

trim() 字符串优先,而不是使用第一个.replace

const filterInput = (vals) => {
  const result = vals
    .trim()
    .replace(/\s+/g, ' ')
    .replace(/[^\w ]/g, '');
  console.log(result);
};

filterInput(" squid*^%ward     sponge((bob        ")

您可以将其简化为单个正则表达式,但这不会像 IMO 那样可读:

const filterInput = (vals) => {
  const result = vals
    .trim()
    .replace(/\s+|\W/g, s => s[0] === ' ' ? ' ' : '');
  console.log(result);
};

filterInput(" squid*^%ward     sponge((bob        ")

【讨论】:

  • 感谢您的及时回复!您认为trim() 和第一个.replace 在性能方面有很大差异吗?我的意思是,使用trim() 肯定更具可读性。
  • 对于一个非常简单的字符串替换,性能永远不值得担心。如果您希望脚本运行得更快,请运行性能测试并检查哪些部分占用的 CPU 时间最多 - 简单的字符串替换不会是其中之一。我敢打赌trim 更快,因为解释器知道它可以从末尾向后查找以查找要删除的内容,而正则表达式要求引擎查看字符串中的所有字符,直到完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 2011-07-31
  • 2013-06-19
  • 1970-01-01
  • 2013-02-26
  • 2021-12-25
  • 2018-12-14
相关资源
最近更新 更多