javascript - 如何用正则匹配连续重复的字符串片段?

 不如藏拙_487 发布于 2022-11-27 00:32

有一个字符串,里面都是用',(逗号)'隔开的数字,只有一个数字出现了1次,其他所有数字都出现了2次。我如何通过正则匹配或者替换的方式,提取出这个只出现过1次的数字。
例如:
1.var一个字符串str和正则表达式re

  var str = '112,112,1,1,3,3,234,234,4,22,22';
  var re;

2.如何通过正则匹配或者替换,改变str的值为'4'

  str = str.match(re);
  或者
  str = str.replace(re,'');//想让str值为'4'
6 个回答
  • 正则并不合适作这样的事~,还是用循环吧~~

    var str = '8,999,112,112,1,88,1,3,3,88,234,234,4,22,999,22';
    var arr = str.split(',');
    var d = {};
    for(x in arr){d[arr[x]]=d[arr[x]] ? d[arr[x]]+1 : 1;}
    arr=[];
    for(x in d){if (d[x]==1){arr.push(x);}}
    console.log(arr);
    ["4", "8"]
    2022-11-27 01:54 回答
  • 第一个问题:提取出只出现过 1 次的数字

    '112,112,1,1,3,3,234,234,4,22,223'.replace(/\d{3}(,|$)/g, function(e) {
    
        // 这里我只判断了其中一种情况(第一个数与第二个数相等,但第三个数不一样时)以作示范
        if (e[0] === e[1]) {
            if (e[0] !== e[2]) {
                if (e[3] === ",") {
                    return e[0] + e[1] + "(" + e[2] + ")" + e[3];
                } else {
                    return e[0] + e[1] + "(" + e[2] + ")";
                }
            }
        }
    
        return e;
    });
    
    result:11(2),11(2),1,1,3,3,234,234,4,22,22(3)

    第二个问题:改变 str 的值为'4'

    str.replace(/.*/, "4");

    如果是先提取 4,再改变的话,上面已经有答案了。

    2022-11-27 01:54 回答
  • str += ',';
    str.replace(/(d+,)\1+/g, '').replace(/,$/, '');
    2022-11-27 01:54 回答
  • var str = '112,112,1,1,3,3,234,234,4,22,22';
    var re=/(.*?),\1/g;
    console.log(str.replace(re, ''));
    2022-11-27 01:54 回答
  • var str = '112,112,1,1,3,3,234,234,4,22,22';
    str += ',';
    var result = str.replace(/(\d+\,)\1+/g, ''); // 匹配连续多个'ddd,'
    console.log(result); // '4,'
    result = result.replace(/\,$/, ''); // 去掉结尾','
    console.log(result); // '4'
    2022-11-27 01:54 回答
  • 正则匹配需要视实际情况而定,比如说:

    var pattern1 = /\d+(?!,)$/g;
    var pattern2 = /\d+$/g;
    var str = '112,112,1,1,3,3,234,234,4';
    console.log(str.match(pattern2));  //["4"]
    或者直接这样:
    str.replace(/\d+,/g, '');  //'4'
    
    更改题目后:
    如果说其他所有数字都出现了2次都是挨着的,楼下的写法OK。
    str += ',';
    str.replace(/(d+,)1+/g, '').replace(/,$/, '');
    如果不挨着,就不行,那就先处理下
    var arr = str.split(',');
    arr.sort();
    str = arr.join(',');
    str += ',';
    str.replace(/(d+,)1+/g, '').replace(/,$/, '');

    我这个总结或许能帮到一下:
    js正则表达式

    2022-11-27 01:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有