Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的字符串替换_Javascript - Fatal编程技术网

JavaScript中的字符串替换

JavaScript中的字符串替换,javascript,Javascript,我有两条线: var str1 = '8***8***'; var str2 = '898-8293'; 如何将字符串1中的数字与第二个字符串中的html元素进行包装,如下所示: '<b>8</b>98-<b>8</b>293' '898-8293' 注意:并非所有的“8”数字都是换行的 [编辑] 多亏了Soufiane Hassou和voyager,以下功能得以实现: <script type="text/javascript">

我有两条线:

var str1 = '8***8***';
var str2 = '898-8293';
如何将字符串1中的数字与第二个字符串中的html元素进行包装,如下所示:

'<b>8</b>98-<b>8</b>293'
'898-8293'
注意:并非所有的“8”数字都是换行的

[编辑]

多亏了Soufiane Hassou和voyager,以下功能得以实现:

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

变量str1='8***8***';
var str2='898-8293';
var结果=[];
var arr1=str1.拆分(“”);
var arr2=标准分割(“”);
对于(变量i=0;i
var结果=“”;
对于(int i=0;i
这就是您想要做的吗?

突出显示\u string=function(str,mask){
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;
}
var结果=“”; str1=掩码。拆分(“”); str2=str.split(“”); 对于(int i=0;i

继续扩展,我认为这更接近于您所要查找的内容。

看起来您实际要做的不是组合这两个字符串,而是将str1中的正则表达式与str2中的值匹配。如果是这种情况,您可能希望将str1更改为正则表达式并对其进行测试。类似于以下内容:

/[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');
var str2='898-8293';
var str3=str2.replace(/(\d{1})(\d{2})()(\d{1})(\d{3})/g,
$1
$2$3
$4
$5'); 警报(str3);

为了获胜。

我想你可能会对你实际要做的事情感到困惑。这看起来像是你在试图根据str1中表达的某种正则表达式来匹配str2。因此,你要做的是用str1中的字符替换str2中的一个字符?我假设任何一个字符串都可以更改,如果是这样,同样的操作也需要更改执行?我有两个字符串,一个是从用户输入中获得的,另一个是从服务器中获得的。@goyo:您可以选择“正确的”单击答案旁边的绿色大复选框进行回答。欢迎使用StackOverflow。这在IE6中不起作用,因为你不能将字符串视为数组。是的,但他也想突出显示原始字符串的匹配部分。在这种情况下,你必须拆分用户输入字符串,并将其作为一系列常规字符串在循环中处理用于确定显式匹配字符串和中间通配符字符串的表达式。多亏了split方法。for
循环中的初始化语句应该是
var i=0
for循环中的条件语句应该是
(str1[i]!“*”)|(str2[i]==str1[i])
,而不是
(str1[i]==“*”)| |(str2[i]==str1[i])
。这会起作用,但基于正则表达式的解决方案会更灵活,因为这取决于用户输入的搜索语句的长度与正在搜索的语句的长度相同,尽管问题似乎已被编辑以消除该问题。谢谢Ryan,我已经实现了这些更改。我有一个不同的功能这使得两个字符串的长度相同,在需要的地方添加*。
/[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');
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);