如何在重复模式后添加换行符

时间:2015-04-27 16:26:45

标签: javascript regex

假设有一个这样的字符串:

var content = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20";

我想在每5个点后添加<br />

所以,结果应该是:

1.2.3.4.5.<br />
6.7.8.9.10.<br />
11.12.13.14.15.<br />
16.17.18.19.20.<br />

我希望在没有for循环的情况下执行此操作。只有正则表达式才有可能吗?

我正在使用此代码执行此操作;

regenerate:function(content,call){
    var data2;
    var brbr = content.replace(/[\u0250-\ue007]/g, '').match(/(\r\n)/g);
    if (brbr !== "") {
      data2 = content.replace(/[\u0250-\ue007]/g, '').replace(/(\r\n)/gm, "<br><br>");
    } else {
      data2 = content.replace(/[\u0250-\ue007]/g, '');
    }
    var dataArr = data2.split(".");

    for (var y = 10; y < dataArr.length - 10; y += 10) {
      var dataArrSpecific1 = dataArr[y] + ".";
      var dataArrSpecific2 = dataArr[y] + ".<br>";
      var dataArrSpecificBosluk = dataArr[y + 1];
      var data3 = data2.replace(new RegExp(dataArrSpecific1.replace(/[\u0250-\ue007]/g, ''), "g"), "" + dataArrSpecific2.replace(/[\u0250-\ue007]/g, '') + "");
      data3 = data3.replace(new RegExp(dataArrSpecificBosluk.replace(/[\u0250-\ue007]/g, ''), "g"), "&nbsp;&nbsp;&nbsp;&nbsp;" + dataArrSpecificBosluk.replace(/[\u0250-\ue007]/g, '') + "");
      data2 = data3;
    }
    call(data2.replace(/[\u0250-\ue007]/g, ''));
  }

实际上,我想重构这段代码

1 个答案:

答案 0 :(得分:1)

工作箱:http://jsbin.com/dikifipelo/1/

var string = "1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20." ;   

string = string.replace(/(([^\.]+\.){5})/g, "$1<br/>");

适用于点之间任何类型和长度的字符。

<强>解释: 模式/(([^.]+.){5})/g可以分解为:

  • [^\.] - 任何不是点的字符
  • [^\.]+ - 任何不是点,一次或多次的字符
  • [^\.]+\. - 任何不是点,一次或多次的字符,后跟一个点
  • ([^\.]+\.){5} - 任何字符....点,出现五次
  • (([^\.]+\.){5}) - 任何......五次,抓住这个(所有圆括号捕获除非被告知不要,用?:作为其中的第一件事) /g/标志使得整个字符串匹配 - 即找到所有匹配
  • "$1"代表第一组(或括号)的结果 所以,replace函数在字符串中查找模式的所有实例,并用匹配本身替换它们+换行符(br)。

一旦你学会了正则表达式,生活就永远不变了。