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

如何避免Jquery规则匹配中的重复替换,jquery,regex,Jquery,Regex,我有一根像 var str = "图1,good boy,图11,图2,图1,good girl"; 和一个正则表达式一样 var regex = new RegExp("图[0-9]{1,2}","g"); 然后我用 var matchArray = str.match(regex) 返回[图1.图11,图2.图1] ,然后我将删除重复的数据 将数组更改为[图1.图11,图2];我要做的是替换匹配的单词来包装匹配的单词 但是有一个问题。如果先替换image1,它将错误地替换str图第

我有一根像

var str = "图1,good boy,图11,图2,图1,good girl";
和一个正则表达式一样

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

 var matchArray = str.match(regex) 
返回[图1.图11,图2.图1] ,然后我将删除重复的数据 将数组更改为[图1.图11,图2];我要做的是替换匹配的单词来包装匹配的单词

但是有一个问题。如果先替换image1,它将错误地替换str图第1页图11.如果更换图11与图11首先,何时更换图1,它将错误地替换图第1页图11
这是一个简单的例子。实际情况比这个例子复杂。

一种方法是在、、上拆分字符串,然后在值匹配的地方拆分字符串图[0-9]{1,2},在重新组合字符串之前,将值替换为值:

var str=图1,好孩子,图11,图2.图1、好女孩; console.logstr .分裂',' .mapv=>v.match/图[0-9]{1,2}/u`${v} `:v .加入','
; 我找到了另一种解决这个问题的方法。 首先,创建一个函数来生成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;

因为实际情况比示例复杂,所以此方法可以解决不规则字符串

,谢谢您的回答。实际情况是字符为中文,字符分隔不规则。@Ming我根据您问题的更改修改了我的答案。
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;
for(var i = 0 ; i < matchArray.length; i++){
 var obj = {};
 obj[matchArray[i]] = createUUID();
};
   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);
   }