2016-07-20 4 views
0

Я пытаюсь заменить строку на data.replace, ее работоспособность при использовании жесткого кода или статического значения. Но теперь я хочу заменить несколько значений циклом, но он не работает.jQuery заменить переменной неработоспособной

Мой код:

for(var i = 0; i<words.length; i++){ 
    var r = words[i]; 
    data = data.replace(/\[(\[qid:{r})\]]/g, words[i]); 
} 

Слова содержит:

Array [ "hid_1", "hid_2", "hid_6", "hid_7" ] 

и мои данные:

Site: [[qid:hid_1]]<br> 

Block: [[qid:hid_2]]<br> 

Nimewo kay la: [[qid:hid_6]]<br> 

Latitude: [[qid:hid_7]] 

сво содержание HTML.

я просто нужна переменная здесь:

for(var i = 0; i<words.length; i++){ 

     var r = words[i]; 
     data = data.replace(/\[(\[qid:hid_1)\]]/g, 'test'); 
       //data.replace(/\[(\[qid:{r})\]]/g, 'test'); 

    } 
+0

Какой выход вы ожидаете? –

+0

Ожидаемое состояние: Состояние: hid_1 Блок: hid_2 –

+0

Похоже, вы используете одно и то же регулярное выражение на каждой итерации, поэтому каждый из них будет заменен первым словом - это то, что происходит? – nnnnnn

ответ

1
var words = [ "hid_1", "hid_2", "hid_6", "hid_7" ]; 

var data = "Site: [[qid:hid_1]]<br>\ 
Block: [[qid:hid_2]]<br>\ 
Nimewo kay la: [[qid:hid_6]]<br>\ 
Latitude: [[qid:hid_7]]"; 

for(var i = 0; i<words.length; i++){ 
     var r = words[i]; 
     var reg = new RegExp('\\[\\[qid:' + r +'\\]\\]'); 
     data = data.replace(reg, r); 
} 
+0

WOW .... GREAT ... THANKSSS .. !!! –

0

это то, что вы делаете? Кажется хорошо.

data =["Site: [[qid:hid_1]]", 
"Block: [[qid:hid_2]]<br>", 
"Nimewo kay la: [[qid:hid_6]]", 
"Latitude: [[qid:hid_7]]" ]; 

var words = [ "hid_1", "hid_2", "hid_6", "hid_7" ]; 
for(var i = 0; i<words.length; i++){ 

    var r = data[i]; 
    r = r.replace(/\[(\[qid:\w+)\]]/g, words[i]); 
    console.log(r); 

} 
+0

Мне нужен весь контент с замененными значениями .. не только значения ... –

+0

проверить мой отредактированный вопрос ,. –

+0

разбить его и присоединиться к нему, снова ... – anchreg

1

Вы можете просто удалить символы, которые не принадлежат. Затем вам не нужен другой массив строк замены.

EDIT

Если данные одна длинная строка, вы можете сделать следующее:

var data = 'Site: [[qid:hid_1]]<br> Block: [[qid:hid_2]]<br> Nimewo kay la: [[qid:hid_6]]<br> Latitude: [[qid:hid_7]]'; 
 

 
data = data.replace(/\[\[qid:(.*?)]](?:<br>)?/g, '$1'); 
 

 
console.log(data);


В противном случае, если ваши данные в массиве , вы можете сделать это:

var strings = [ 
 
    'Site: [[qid:hid_1]]<br>', 
 
    'Block: [[qid:hid_2]]<br>', 
 
    'Nimewo kay la: [[qid:hid_6]]<br>', 
 
    'Latitude: [[qid:hid_7]]' 
 
]; 
 

 
strings = strings.map(function(string) { 
 
    return string.replace(/\[.*?:([^\]]*).*/, '$1') 
 
}); 
 

 
console.log(strings);

+0

Я уважаю вашу работу ... но не нуждаюсь в этом. Я просто хочу заменить искомый контент на data.replace (/ \ [(\ [qid: hid_1) \]]/g, 'test'); см.: Data.replace (/ \ [(\ [qid: hid_1) \]]/g, 'test'); Хотите: data.replace (/ \ [(\ [qid: {r}) \]]/g, 'test'); здесь «r» - это переменная, содержащая hid_1, hid_2 и т. Д., И я просто хочу заменить test..means в данных.замените я просто хочу разместить переменную {r}, чтобы я мог изменить строку в цикле ... спасибо –