【问题标题】:Replace all dots to single将所有点替换为单个
【发布时间】:2019-02-24 07:45:11
【问题描述】:

如何替换

. . . Hello . . . . . . world . . .

. Hello . world .

用简单的点替换“点空间点”

试过这样:

/(\.\s\.)+/i

【问题讨论】:

  • 字符串是否以空格开头和结尾,还是替换器插入了那些额外的空格?
  • @CertainPerformance 输入字符串可以开始,结果没有空格

标签: javascript regex regular-language


【解决方案1】:

我们可以将替换表述为任何单个点,其后跟着一个空格和另一个点,整个数量出现一次或多次。也就是说,我们可以找到下面的模式,然后用一个点替换:

\.( \.)+

代码示例:

var input = ". . . Hello . . . . . . world . . .";
console.log(input);
input = input.replace(/\.( \.)+/g, ".");
console.log(input);

编辑:

我们可以通过使用?: 关闭捕获来稍微提高模式效率,即使用以下模式:

\.(?: \.)+

【讨论】:

  • 您的代码看起来更短,答案更易于解释。第一个答案使用构造?:,据我了解没有必要?
  • @ИльяЗеленько 模式\.(?: \.)+ 只是告诉正则表达式引擎 捕获() 中的内容。因此,它可能会使替换稍微更有效率。我选择不包括它,但如果你愿意,你可以这样做。
【解决方案2】:

你可以使用

/\.(?: \.)+/

匹配一个句点,然后尽可能多地重复一组空格,后跟一个句点,然后将其全部替换为一个句点。

const str = '. . . Hello . . . . . . world . . .';
console.log(
  str.replace(/\.(?: \.)+/g, '.')
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2021-08-23
    相关资源
    最近更新 更多