2009-11-11 163 views
0

我有两个字符串:字符串替换在JavaScript

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

我如何包装在串一个发现的数字,与第二个字符串html元素,就像这样:

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

注意:并非所有'8'数字都被封装。

[编辑]

感谢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

我想你可能会对你实际尝试做的事感到困惑。这看起来像你正试图根据str1中表达的某种正则表达式匹配str2。 – 2009-11-11 19:03:48

+0

所以你想要做的是用str1中的一个字符替换str2中的一个字符?我假设任何一个字符串都可以改变,如果是这样,需要执行相同的操作? – ChadNC 2009-11-11 19:09:59

+0

我字面上有两个字符串,一个是从用户输入中获得的,另一个是从服务器获得的。 – goyote 2009-11-11 19:11:15

回答

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 2009-11-11 19:23:09

+0

for循环中的初始化语句应该是'var i = 0' for循环中的条件语句应该是'(str1 [i]!=“*”)|| (str2 [i] == str1 [i])',而不是'(str1 [i] ==“*”)|| (str2 [i] == str1 [i])'。这是行得通的,但基于正则表达式的解决方案会更加灵活,因为这取决于用户输入搜索语句的长度与搜索语句的长度相同,尽管看起来问题已被编辑以否定该问题。 – 2009-11-11 20:19:47

+0

谢谢瑞恩,我已经实施了这些改变。我有一个不同的功能,使两个字符串的长度相同,在需要的地方添加*。 – goyote 2009-11-11 21:16:47

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 2009-11-11 19:09:53

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 2009-11-11 19:17:08

+0

在这种情况下,您将不得不拆分用户输入字符串,并将它们作为一系列正则表达式在循环中进行处理,以确定显式匹配的字符串和中间通配符字符串。 – 2009-11-11 20:06:03

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); 

为胜。