Py学习  »  Jquery

如何避免Jquery规则匹配中的重复替换

Ming • 4 年前 • 980 次点击  

我有一根绳子

var str = "图1,good boy,图11,图2,图1,good girl";

像regex一样

var regex = new RegExp("图[0-9]{1,2}","g");

然后我用

 var matchArray = str.match(regex) 

若要返回数组[“1”、“11”、“2”、“1”],则我将删除重复的数据 将数组更改为[“图1”,“图11”,“图2”];我要做的是替换匹配的单词来包装 "<span>matchWord</span>"

for(var x = 0;x < matchArray.length; x++){
  var temp = "<span>"+matchArrat[x]+"</span";
  var tempRegex = new RegExp(matchArray[x],"g");
  str = str.replace(tempRegex,temp);
}

但是有一个问题,如果先替换image1,如果将“11”替换为 <span>图11</span> “首先,当更换图1时,将错误地更换”图1“的 "<span>图11</span>" 这是一个简单的例子,实际情况比这个例子复杂。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52507
 
980 次点击  
文章 [ 2 ]  |  最新文章 4 年前
lesliehuang93
Reply   •   1 楼
lesliehuang93    4 年前

我找到了另一种方法来解决这个问题。 首先,创建一个函数来生成uuid。

function createUUID() { // 超级大乐透 var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) {幸运时时彩 s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);十一运夺金

Ming
Reply   •   2 楼
Ming    4 年前

我找到了另一种方法来解决这个问题。 首先,创建一个函数来生成uuid。

function createUUID() {
// http://www.ietf.org/rfc/rfc4122.txt
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";

var uuid = s.join("");
return uuid;

} 然后,循环matchArray并使用一个对象来记录

for(var i = 0 ; i < matchArray.length; i++){
 var obj = {};
 obj[matchArray[i]] = createUUID();
};

var uuids=createUUID(); 然后用uuid替换匹配字

   for (var i = 0 ; i < matchArray.length ; i++) {
         var matchWord = matchArray[i];
         var replaceRegex = new RegExp(matchWord,"g");
         var tempStr = uuids[matchArray[i]];
         var replaceHtml = "<span >"+tempStr+"</span>"
         replaceText = replaceText.replace(replaceRegex,replaceHtml);
  }

替换后,循环对象属性

for ( var key in uuids){
   var tempRegex = new RegExp(uuids[key],"g");
   replaceText = replaceText.replace(tempRegex,key);
   }

由于实际情况比实例复杂,所以该方法可以解决不规则字符串

Nick
Reply   •   3 楼
Nick    4 年前

一种方法是把绳子分开 , ,然后在值匹配的任何位置 图[0-9]{1,2} ,将值替换为 <span>value</span> 重新组装管柱之前:

var str = "图1,good boy,图11,图2,图1,good girl";
console.log(str
            .split(',')
            .map(v => v.match(/图[0-9]{1,2}/u) ? `<span>${v}</span>` : v)
            .join(',')
            );