javascript中replace()用法详解
在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。
replace()最简单的算是能力就是简单的字符替换。
示例代码如下:
<script language="javascript">
var strM = "javascript is a good script language";//在此我想将字母a替换成字母Aalert(strM.replace("a","A"));
</script>
我想大家运行后可以看到结果,它只替换了首字母。但如果加上正则表达式结果就不一样了!呵呵,没错。replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换!
<script language="javascript">v
ar strM = "javascript is a good script language";//在此我想将字母a替换成字母Aalert(strM.replace(/a/,"A"));
</script>
呵呵,您一定发现了。这样还是只替换了第一个字母a。如果您熟悉正则,那这就难不住您。稍加修改就OK了。<script language="javascript">
var strM = "javascript is a good script language";//在此将字母a全部替换成字母Aalert(strM.replace(/a/g,"A"));
</script>
还可以这样,看看效果!
<script language="javascript">
var strM = "javascript is a good script language";alert(strM.replace(/(javascript)/s*(is)/g,"$1 $2 fun. it $2"));
</script>
我这儿举的例子都是很简单的应用,replace()在此点上与您使用正则表达式的能力成正比。您正则表达式越强,呵呵,那您就会越疯狂的爱上它。 当然,我这儿推荐replace()的原因并不因为它能与正则表达式合作,而在于它还能与函数进行合作,发挥出强大的功能。
先看看简单例子:将所有单词首字母换成大写。
<script language="javascript">
var strM = "javascript is a good script language";function change(word){ return word.indexOf(0).toUpperCase()+word.substring(1);}alert(strM.replace(//b/w+/b/g,change));
</script>
由上可知,当正则表达式有"g"标志时,代表将处理整个字符串,即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数,具体个数视正则表达式而定。 有了函数与正则表达式的配合,replace()处理字符串的功能空前强大起来了! 最后还举个例子,将字符串所有单词倒序,用replace()处理是如此简单。
<script language="javascript">
var strM = "javascript is a good script language";
function change(word)
{ var result = word.match(/(/w)/g);if ( result ){ var str = "";
for ( var i=result.length-1; i>=0; i-- )
{ str += result; }
return str;
}
else{ return "null";}}
alert(strM.replace(//b(/w)+/b/g,change));
</script>
========================================================
分割线
========================================================
match() 定义和用法
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
语法
stringObject.match(searchvalue) stringObject.match(regexp)
参数 | 描述 |
---|---|
searchvalue | 必需。规定要检索的字符串值。 |
regexp | 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。 |
返回值
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
说明
match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。
注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果您需要这些全局检索的信息,可以使用 RegExp.exec()。
实例
例子 1
在本例中,我们将在 "Hello world!" 中进行不同的检索:
<script type="text/javascript"> var str="Hello world!" document.write(str.match("world") + "<br />") document.write(str.match("World") + "<br />") document.write(str.match("worlld") + "<br />") document.write(str.match("world!")) </script>
输出:
world null null world!
例子 2
在本例中,我们将使用全局匹配的正则表达式来检索字符串中的所有数字:
<script type="text/javascript">
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g)
)
</script>
输出:
1,2,3
=====================================================
分割线
=====================================================
javascript中使用replaceAll()的方法(转)
第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符.
而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。
replace()
The replace() method returns the string that results when you replace text matching its first argument
(a regular expression) with the text of the second argument (a string).
If the g (global) flag is not set in the regular expression declaration, this method replaces only the first
occurrence of the pattern. For example,
var s = "Hello. Regexps are fun."
;s = s.replace(/\./, "!" ); // replace first period with an exclamation pointalert(s);
produces the string “Hello! Regexps are fun.” Including the g flag will cause the interpreter to
perform a global replace, finding and replacing every matching substring. For example,
var s = "Hello. Regexps are fun."
;s = s.replace(/\./g, "!" ); // replace all periods with exclamation pointsalert(s);
yields this result: “Hello! Regexps are fun!”
所以可以用以下几种方式.:
string.replace(/reallyDo/g, replaceWith);
string.replace(new RegExp(reallyDo, 'g'), replaceWith);
string:字符串表达式包含要替代的子字符串。
reallyDo:被搜索的子字符串。
replaceWith:用于替换的子字符串。
01 |
<script type= "text/javascript" > |
02 |
|
03 |
String.prototype.replaceAll = function (reallyDo, replaceWith, ignoreCase) { |
04 |
|
05 |
if (!RegExp.prototype.isPrototypeOf(reallyDo)) { |
06 |
|
07 |
return this .replace( new RegExp(reallyDo, (ignoreCase ? "gi" : "g" )), replaceWith); |
08 |
|
09 |
} else { |
10 |
|
11 |
return this .replace(reallyDo, replaceWith); |
12 |
|
13 |
} |
14 |
|
15 |
} |
16 |
|
17 |
</script> |