社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

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

Ming • 5 年前 • 1691 次点击  

我有一根绳子

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
 
1691 次点击  
文章 [ 2 ]  |  最新文章 5 年前
lesliehuang93
Reply   •   1 楼
lesliehuang93    5 年前

我找到了另一种方法来解决这个问题。 首先,创建一个函数来生成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    5 年前

我找到了另一种方法来解决这个问题。 首先,创建一个函数来生成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    5 年前

一种方法是把绳子分开 , ,然后在值匹配的任何位置 图[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(',')
            );