RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 684724
Accepted
Oleg Ovcharenko
Oleg Ovcharenko
Asked:2020-06-28 18:49:58 +0000 UTC2020-06-28 18:49:58 +0000 UTC 2020-06-28 18:49:58 +0000 UTC

JS 删除文本中除第一次出现以外的所有空格

  • 772

如何删除文本中除第一个以外的所有空格?

javascript
  • 6 6 个回答
  • 10 Views

6 个回答

  • Voted
  1. Best Answer
    Visman
    2020-06-28T19:45:35Z2020-06-28T19:45:35Z

    不使用函数的纯正则表达式的变体

    var text = 'Как удалить все пробелы в тексте кроме первого встречающегося?';
    text = text.replace(/(^[^ ]* )|[ ]+/g, '$1');
    console.log(text);

    在这里,第一个捕获组(^[^ ]* )(它将捕获从行首到第一个空格的文本+空格本身)将只工作一次,并将原封不动地插入到结果字符串$1中,然后[ ]+将遇到的所有空格都删除,因为第一个捕获组将返回一个空值。

    • 6
  2. Visman
    2020-06-28T18:58:58Z2020-06-28T18:58:58Z

    将柜台挂在空格上;)

    var text = 'Как удалить все пробелы в тексте кроме первого встречающегося?';
    var count = 0;
    text = text.replace(/ /g, 
        function() {
            if (++count > 1) {
                return '';
            } else {
                return ' ';
            }
        });
    console.log(text);

    • 3
  3. Wiktor Stribiżew
    2020-06-28T19:03:41Z2020-06-28T19:03:41Z

    现代方法

    您可以在后预览块中使用未知长度模式:

    const text = 'Как удалить все пробелы в тексте кроме первого встречающегося?';
    console.log(text.replace(/(?<=\s.*?)\s+/gs, ''));

    查看表达式如何工作的示例。(?<=\s.*?)– 向后查找块,查找字符串中紧接空格字符后跟 0 个或多个任意字符(尽可能少)的位置,并\s+找到 1 个或多个空白字符。

    旧答案

    由于正则表达式引擎本身并不知道它找到了多少个匹配项,因此您需要自己添加标志并将其设置为true是否已找到第一个匹配项。

    以下是删除除第一个空格之外的空格序列的示例:

    var s = "1  2 3 4 5   6    ";
    var first = false;
    var res = s.replace(/\s+/g, function($0) {
      if (!first) {
        first = true;
        return $0;
       } else return "";
    })
    console.log(res);

    如果只想保留第一个序列的第一个空格,请将表达式更改为

    /\s/g
    

    请注意,它会\s找到任何空白字符,如果您只想删除常规空白(字符\x20),请替换为/ /(请参阅@Visman 的回答)。'`。

    有一种方法可以在没有计数器和标志的情况下进行。使用(^\S*\s*)?\s+,您可以检查第一个子模式的模式是否已被捕获,如果是,则保留它,否则将其删除:

    var s = "1  2 3 4 5   6    ";
    
    // Если нужно оставить целую первую пробельную последовательность
    var res = s.replace(/(^\S*)?\s+/g, function($0,$1) {
       return $1 ? $0 : "";
    });
    console.log(res);
    
    // Если нужно оставить только 1-й пробел из первой пробельной последовательности
    res = s.replace(/(^\S*)?(?!^)\s/g, function($0,$1) {
       return $1 ? $0 : "";
    });
    console.log(res);

    第一季常规赛详情

    • (^\S*)?- 捕获第 1 组、1 或 0 个匹配项(可选),找到文本的开头和除空格以外的 0 个或多个字符
    • \s+- 1 个或多个空格。

    在第二个正则表达式 - (^\S*)?(?!^)\s- 中有相同的第一个捕获组,之后检查行的开头 ( (?!^)) (如果我们在行的开头,则跳过下一个空格),\s它将只找到一个空格字符。

    • 3
  4. Grundy
    2020-06-28T19:36:36Z2020-06-28T19:36:36Z

    没有常客的变体。

    您可以通过按空格拆分字符串来使用该方法。split

    接下来,在第一个元素后插入一个空格并使用join连接数组

    var text = 'Как удалить все пробелы в тексте кроме первого встречающегося?';
    
    arr = text.split(' ');
    arr.splice(1, 0, ' ');
    console.log(arr.join(''));

    • 2
  5. Qwertiy
    2020-06-28T19:45:15Z2020-06-28T19:45:15Z

    我想稍微调整一下:

    var text = "Как удалить все пробелы в тексте кроме первого встречающегося?"
    console.log(text.split("").reverse().join("").replace(/ (?=.*? )/g,"").split("").reverse().join(""))

    • 2
  6. Aliaksandr Pitkevich
    2020-06-28T19:19:52Z2020-06-28T19:19:52Z

    可选 (ES6):使用Split、Join、Splice方法

    function delSpaces (s) {
        let arr = s.split(' ');
        let s1 = arr.splice(1).join('');
        return `${arr[0]} ${s1}`;
    };
    console.log(delSpaces('Убрать пробелы везде кроме первого'));

    甚至在一行中,这可能会影响可读性:

    function delSpaces (s) {
        return `${s.split(' ')[0]} ${s.split(' ').splice(1).join('')}`;
    };
    console.log(delSpaces('Убрать пробелы везде кроме первого'));

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5