定义和用法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法
stringObject.replace(regexp/substr,replacement)
参数 | 描述 |
---|---|
regexp/substr |
必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 |
replacement | 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 |
一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
字符 | 替换文本 |
---|---|
$1、$2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& | 与 regexp 相匹配的子串。 |
$` | 位于匹配子串左侧的文本。 |
$' | 位于匹配子串右侧的文本。 |
$$ | 直接量符号。 |
참고: ECMAScript v3에서는 replacement() 메서드의 매개변수 대체가 문자열이 아닌 함수일 수 있다고 규정합니다. 이 경우 일치하는 각 항목에 대해 함수가 호출되고 해당 함수가 반환하는 문자열이 대체 텍스트로 사용됩니다. 이 함수의 첫 번째 매개변수는 패턴과 일치하는 문자열입니다. 다음 인수는 패턴의 하위 표현식과 일치하는 문자열이며 이러한 인수는 0개 이상 있을 수 있습니다. 다음 매개변수는 일치가 발생하는 stringObject의 위치를 선언하는 정수입니다. 마지막 매개변수는 stringObject 자체입니다.
더 많은 기본 예제는 여기에서 볼 수 있습니다: http://www.jb51.net/w3school/js/jsref_replace.htm
replacement() 메소드의 매개변수 대체는 다음과 같습니다. 문자열 대신 함수가 되어야 합니다. 이 경우 일치하는 각 항목에 대해 함수가 호출되고 해당 함수가 반환하는 문자열이 대체 텍스트로 사용됩니다. 이 함수의 첫 번째 매개변수는 패턴과 일치하는 문자열입니다. 다음 인수는 패턴의 하위 표현식과 일치하는 문자열입니다. 이러한 인수는 0개 이상이 있을 수 있습니다. 다음 매개변수는 일치가 발생하는 stringObject의 위치를 선언하는 정수입니다. 마지막 매개변수는 stringObject 자체입니다.
다음은 자바스크립트 정규식을 대체하는 몇 가지 방법을 보여줍니다. 두 번째 및 타사 방법과 같이 다른 곳에서는 거의 볼 수 없는 방법도 있습니다.
//방법 1, 가장 간단하고 일반적으로 사용되는 방법
var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
alert(rep);
//방법 2, 고정 매개변수가 있는 콜백 함수 사용
var rep2=url.replace(reg,function(m,p1,p2,p3){return p1 "ShowBook.aspx?bookId=" p3 " &chapterId =" p3});
경고(rep2);
//방법 3, 고정되지 않은 매개변수가 있는 콜백 함수 사용
var rep3=url.replace(reg,function(){var args=arguments; return args[1] "ShowBook.aspx?bookId= " args [2] "&chapterId=" args[3];});
alert(rep3);
//방법 4
//방법 4는 방법 3과 매우 유사합니다. 대체된 문자열을 반환하는 것 외에도 매개변수를 별도로 얻을 수도 있습니다
[코드]
var bookId;
var ChapterId;
function capText()
{
var args=arguments;
bookId=args[2];
ChapterId=args[3];
return args[1] "ShowBook.aspx?bookId=" args[2] "&chapterId=" args[3];
}
var rep4=url.replace(reg,capText);
alert(rep4);
alert(bookId);
alert(chapterId);
//replace 메소드를 사용하여 정규식 그룹화를 얻는 것 외에도 test 및 exec 메소드를 사용하여 그룹화를 얻을 수도 있지만 방법이 다릅니다.
var reg2=new RegExp ("(http://www.qidian.com/BookReader/)(\d ),(\d ).aspx","gmi");
var m=reg2.exec("http://www .qidian.com/BookReader /1017141,20361055.aspx");
var s="";
//모든 그룹 가져오기
for (i = 0; i < m.length; i ) {
s = s m[i] "n";
}
경고;
bookId=m[2];
chapterId=m[3];
alert(bookId);
alert(chapterId);
//테스트 방법을 사용하여 그룹을 가져옵니다
var reg3=new RegExp("(http://www.qidian.com/BookReader/)(\d ),(\d ). aspx", "gmi");
reg3.test("http://www.qidian.com/BookReader/1017141,20361055.aspx");
//3개 그룹 가져오기
alert(RegExp .$1 );
경고(RegExp.$2);
경고(RegExp.$3);
var str="www.baidu.com";
//str.format("good","q")
str.replace(new RegExp("(\.)(bai)du "," g "), 함수 () {
for (var I = 0; I & lt; 인수.길이; i)
{
Document.write (인수 [i]" & lt; br/& gt;");
>
두 가지 예(일반 매개변수와 문자 매개변수를 대체한 결과가 다름을 증명하기 위해):
alert("123".replace("1",function(){var un;return un;})); //undefine23 팝업
alert("123".replace(new RegExp("1) " ),function(){var un;return un;}))); //팝업 23
몇 가지 예:
replace()는 가장 간단한 유일한 기능은 간단한 문자 교체입니다. 예: