javascript的替换replace使用正则表达式



参数一:正则表达式对象或字面量(支持gi模式)    g全局匹配    i忽略大小写
参数二:要替换的字符串或一个function

可以使用正则表达式的相关引用
如果是function,则替换为function的返回值

replace的参数:
match 匹配的子串。(对应于上述的$&。)
p1,p2, ... 假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)
offset 匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是“abcd”,匹配到的子字符串是“bc”,那么这个参数将是1)
string 被匹配的原字符串。

正则表达的引用

$$ 插入一个 "$"。
$& 插入匹配的子串。
$` 插入当前匹配的子串左边的内容。
$' 插入当前匹配的子串右边的内容。
$n 假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。

全局匹配:
var str = "abcd-abcd-abcd";
var result = str.replace(/a/g, "e");
console.log(result);
//输出 ebcd-ebcd-ebcd
//g全局匹配 所有a字符串都将被替换

忽略大小写匹配:

var str = "abcd-abcd-abcd";
var result = str.replace(/A/i, "e");
console.log(result);
// 输出 ebcd-abcd-abcd
// 忽略大小写的匹配 但没有进行全局匹配 所以只替换第一个a

使用function作为第二参数: 
var str = "abcd-abcd-1234";
var result = str.replace(/([a-z]*)-([a-z]*)/gi, function(match,p1,p2,offset,str){ console.log(match); //abcd-abcd 匹配的内容 console.log(p1); //第一个括号中匹配的内容 console.log(p2); //第二个括号匹配的内容 console.log(offset); //0 匹配到的字符串的索引(偏移量) console.log(str); //原始字符串 return [p1,p2].join("+"); }); console.log(result); // 输出 abcd+abcd+1234 // 原字符串中 abcd-abcd 被匹配后 被替换为function返回的内容

在参数中引用正则表达式匹配项:
var str = "a b";
var result = str.replace(/(\w+)\s(\w+)/gi, "$2 $1"); console.log(result); //输出 b a

在参数中引用匹配项左侧内容:
var str = 'abc'; 
var result = str.replace(/b/g, "$`"); 
//$`代表匹配字符的左侧内容 
console.log(result);
//输出: aac

在参数中引用匹配项右侧内容:
var str = 'abc'; 
var result = str.replace(/b/g, "$'"); 
//$'代表匹配字符的右侧内容 console.log(result); 
//输出: acc

使用正则表达式对象:
var str = "a b";
var reg = new RegExp(/(\w+)\s(\w+)/, "gi");
//也可以使用正则表示对象来最为参数
var result = str.replace(reg, "$2 $1");
console.log(result); 
//输出 b a

阅读量: 409
发布于:
修改于: