使用正则表达式将(,,text,,,4,text,3,,)转换为(text,4,text3)

Turning (,,,text,,4,text,3,,) into (text,4,text,3) using regular expression

本文关键字:text 转换 text3 正则表达式      更新时间:2023-09-26

有人能建议regEx使用javascript String.replacement()方法将(,,,text,,4,text,3,,)更改为(text,4,text,3)吗?

这里有一个基于正则表达式的解决方案,它可以在单个replace调用中完成:

var re = /,+(?=,)|,+(?='))|('(),+/g; 
var result = input.replace(re, '$1');

RegEx演示

我建议您在不使用正则表达式的情况下制作,如果您制作一个没有空项的数组,效果会更好:

Array.prototype.clean = function(deleteValue) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == deleteValue) {         
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};
var arr = ",,,text,,4,text,3,,".split(","); //convert string into array
arr.clean(""); // clean all empty items
console.log(arr); // returns ["text","4","text","3"]

这很可能无法使用单个替换来完成,因为Javascript正则表达式相对有限,但您可以尝试:

var str = "(,,,text,,4,text,3,,)"
str.replace(/^'(,+/g, "(")
   .replace(/,+')$/,  ")")
   .replace(/,+/,     ",");
// → "(text,4,text,3)"

请注意,开头、结尾(去掉逗号)和中间(用单个逗号替换多个逗号)有三种不同的情况。

您可以用3个替换来完成:

  1. 将所有"多个逗号"更改为单个逗号
  2. 删除第一个括号后的第一个逗号
  3. 删除最后一个括号前的最后一个逗号

var str = '(,,,text,,4,text,3,,)';
str = str
  .replace(/,+/g, ',')
  .replace(/^'(,/, '(')
  .replace(/,')$/, ')');
alert(str);