javascript中replace的正则表达式语法

本文通过实例展示了JavaScript中replace方法的应用,包括基本替换、模式子表达式替换及使用函数进行复杂替换等技巧。此外,还介绍了如何利用正则表达式实现网页搜索关键字的高亮显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

replace 方法

以下是javascript 中的例子

下面的示例演示了 replace 方法将第一次出现的单词 "The" 替换为单词 "A" 的用法。

function ReplaceDemo(){
   var r, re;                    //
声明变量。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = /The/g;             //
创建正则表达式模式。
   r = ss.replace(re, "A");    //
"A" 替换 "The"
   return(r);                   //
返回替换后的字符串。
}


另外, replace 方法也可以替换模式中的子表达式。 下面的范例演示了交换字符串中的每一对单词:

function ReplaceDemo(){
   var r, re;                      //
声明变量。
   var ss = "The rain in Spain falls mainly in the plain.";
   re = /(\S+)(\s+)(\S+)/g;        //
创建正则表达式模式。
   r = ss.replace(re, "$3$2$1");   //
交换每一对单词。
   return(r);                      //
返回结果字符串。
}

下面的示例(在 JScript 5.5 及更新版本中执行)执行的是从华氏到摄氏的转换,它演示了使用函数作为 replaceText 。要想知道该函数是如何工作的,传递一个包含数值的字符串,数值后要紧跟 "F" (例如 "Water boils at 212" )。

function f2c(s) {
  var test = /(\d+(\.\d*)?)F\b/g;    //
初始化模式。
  return(s.replace
    (test,
      function($0,$1,$2) {
        return((($1-32) * 5/9) + "C");
      }
    )
  );


}
document.write(f2c("Water freezes at 32F and boils at 212F."));

重点就是第三个例子了

1.
在一些网站上搜索文章的时候,会发现这么一个现象,就是搜索的关键字会高亮改变颜色显示出来??这是怎么实现的呢??其实我们可以用正则表达式来实现,具体怎么样实现呢?简单的原理请看下面的代码

<script language="javascript">
var str="
中华人民共和国,中华人民共和国";
var newstr=str.replace(/(
)/g,"<font color=red>$1</font>");
document.write(newstr);
</script>

2.<script language="javascript">
var reg=new RegExp("\\d","g");
var str="abd1afa4sdf";
str.replace(reg,function(){alert(arguments.length);});
</script>

我们惊奇的发现,匿名函数竟然被执行了二次,并且在函数里还带有三个参数
,为什么会执行二次呢??这个很容易想到,因为我们写的正则表达式是匹配单个数字的,而被检测的字符串刚好也有二个数字,故匿名函数被执行了二次。。在匿名函数内部的那三个参数到底是什么内容呢?

最终我们会发现: 前面参数表示匹配到的字符,倒数第二个参数表示匹配时的字符最小索引位置(RegExp.index) ,倒数第一个参数表示被匹配的字符串(RegExp.input) 。其实这些参数的个数,还会随着子匹配的变多而变多的。


也就是说我们可以这样理解javascript 文档中的$0,$1,$2 只是形参, 实参是由正则表达式写好的, 即使我们写成a,b,c, 它运行时所具有的值的仍然是
$0,$1,$2.

 

转载于:https://www.cnblogs.com/dongzhiquan/archive/2009/12/20/1994681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值