首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Jquery正则匹配中避免重复替换

如何在Jquery正则匹配中避免重复替换
EN

Stack Overflow用户
提问于 2019-11-22 11:54:39
回答 2查看 46关注 0票数 0

我有一个像这样的字符串

代码语言:javascript
复制
var str = "图1,good boy,图11,图2,图1,good girl";

和一个正则表达式,比如

代码语言:javascript
复制
var regex = new RegExp("图[0-9]{1,2}","g");

然后我使用

代码语言:javascript
复制
 var matchArray = str.match(regex) 

要返回"图1“、"图11”、"图2“、"图1”数组,我将删除重复数据,将数组更改为"图1“、"图11”、“图2”;我要做的是替换匹配的单词以包装数组

代码语言:javascript
复制
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);
}

但是有一个problem.If替换image1优先,它会错误地替换字符串的"图1“的"图11"。如果先用"<span>图11</span>“替换"图11”,当替换图1时,会错误地替换example.the的"图1“。这是一个简单的图实际情况,比这个例子复杂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-22 12:11:54

一种方法是在,上拆分字符串,然后在任何值与图[0-9]{1,2}匹配的地方,在重新组合字符串之前将该值替换为<span>value</span>

代码语言:javascript
复制
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(',')
            );

票数 1
EN

Stack Overflow用户

发布于 2019-11-26 15:25:05

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

代码语言:javascript
复制
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并使用对象进行记录

代码语言:javascript
复制
for(var i = 0 ; i < matchArray.length; i++){
 var obj = {};
 obj[matchArray[i]] = createUUID();
};

var uuid = createUUID();然后将matchWord替换为uuid

代码语言:javascript
复制
   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);
  }

在替换它之后,然后循环对象属性

代码语言:javascript
复制
for ( var key in uuids){
   var tempRegex = new RegExp(uuids[key],"g");
   replaceText = replaceText.replace(tempRegex,key);
   }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58987251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档