2009-11-11 4 views
0

У меня есть две строки:замена строк в JavaScript

var str1 = '8***8***'; 
var str2 = '898-8293'; 

Как я завернуть цифры, найденные в строке один, с HTML элементов на второй строке, например:

'<b>8</b>98-<b>8</b>293' 

Примечание: Не все цифры «8» завернуты.

[EDIT]

Благодаря Soufiane Hassou и Вояджер следующие работали:

<script type="text/javascript"> 
var str1 = '8***8***'; 
var str2 = '898-8293'; 

var result = []; 

var arr1 = str1.split(''); 
var arr2 = str2.split(''); 

for (var i = 0; i < arr2.length; i++) { 
    if (arr1[i] == arr2[i]) { 
     result.push('<b>' + arr2[i] + '</b>'); 
    } 
    else { 
     result.push(arr2[i]); 
    } 
} 

var newStr = result.join(''); 
</script> 
+0

Я думаю, вы можете быть смущены тем, что вы на самом деле пытаетесь сделать. Похоже, вы пытаетесь сопоставить str2 на основе какого-то регулярного выражения, выраженного в str1. –

+0

Итак, что вы хотите сделать, это заменить символ в str2 символом из str1? Я предполагаю, что любая строка может измениться, и если нужно выполнить одно и то же действие? – ChadNC

+0

Я буквально имею эти две строки, один из которых я получил от пользовательского ввода, а другой - от сервера. – goyote

ответ

0
highlight_string = function(str, mask){ 

    var result=''; 
    str1 = mask.split(""); 
    str2 = str.split(""); 
    for(int i = 0; i < str2.length; i++) { 
     if((str1[i] == "*") || (str2[i] == str1[i])) { 
      result+='<b>' + str1[i] + '</b>'; 
     } 
     else { result+=str2[i]; } 
    } 
    return result; 
} 

Расширяя Soufiane Hassou's answer, я думаю, что это ближе к тому, что вы ищете.

+0

Спасибо, метод разделения сделал разницу. – goyote

+0

Оператор инициализации в цикле 'for' должен быть условным выражением' var i = 0' в цикле for должен быть '(str1 [i]! =" * ") || (str2 [i] == str1 [i]) ', а не' (str1 [i] == "*") || (str2 [i] == str1 [i]) '. Это будет работать, но решение на основе регулярного выражения будет более гибким, так как это зависит от того, как пользователи вводят оператор поиска той же длины, что и поиск, который выполняется, хотя похоже, что вопрос был отредактирован, чтобы отрицать эту проблему. –

+0

Спасибо, Райан, я уже внес эти изменения. И у меня есть другая функция, которая делает обе строки одинаковой длины, добавляя * где необходимо. – goyote

0
var result=''; 
for(int i = 0; i < str2.length; i++) { 
    if(str2[i] == str1[i] { 
     result+='<b>' + str1[i] + '</b>'; 
    } 
    else { result+=str2[i]; } 

} 

Является ли это то, что вы хотите сделать?

+1

Это не работает в IE6, потому что вы не можете обрабатывать строку как массив. – goyote

0

Похоже, что вы на самом деле пытаетесь это сделать, это не объединить две строки, а сопоставить регулярное выражение в str1 со значением в str2. Если это так, вы бы хотели изменить str1 регулярное выражение и проверить str2 на него. Что-то вроде этого:

/[8]\d{2}[-][8]\d{3}/.test('898-8293'); 
//or 
/[8]\d*[-][8]\d*/.test('898-8293'); 
//or 
/[8].*[-][8].*/.test('898-8293'); 
//or 
/[8].*[8].*/.test('898-8293'); 
+0

Да, но он также хочет выделить соответствующий раздел исходной строки. – voyager

+0

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

0
var str2 = '898-8293'; 
var str3 = str2.replace(/(\d{1})(\d{2})(-)(\d{1})(\d{3})/g, '<br>$1</br>$2$3<br>$4</br>$5'); 
alert(str3); 

Для победы.