NodeJs程序员首页投稿(暂停使用,暂停投稿)

js-replace的高阶用法,你知道吗

2016-11-29  本文已影响485人  逐悦
string.replace函数是我们处理字符串需要经常用到的,replace的精妙就在于它的方便和灵活,可以配合正则表达式共同使用,以及还可以对匹配到的组进行分别处理

我们都知道string.replace(arg1,arg2)的基本用法,比如:

var str = 'hello world';
str = str.replace('world','xiaoyue');
console.log(str);

output:
    hello xiaoyue
// 匹配美国电话号码
var str = 'please call 1 (555)555-5555';
str = str.replace(/(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}/g,'12530');
console.log(str);

output:
    please call 12530

下面就让我们学习一下,string.replace的高阶用法

str = 'abcdbc';
str = str.replace(/(b)(c)/g,function(){
    console.log(arguments);
    return '&&';
});
console.log(str);
// output: 
// ["bc", "b", "c", 1, "abcd"]
//  0:bc"
//  1:"b"
//  2:"c"
//  3:1
//  4:"abcd"
//  ...
// ["bc", "b", "c", 1, "abcd"]
//  0:bc"
//  1:"b"
//  2:"c"
//  3:4
//  4:"abcd"
//  ...
//  a&&d&&

函数返回值表示用来替换匹配到的元素的字符串
函数参数表示:

- param 1: 匹配到的字符串
- param 2: 匹配的的子字符串
- param 3: 匹配的子字符串
- param 4: 匹配到的字符串在字符串中的位置
- param 5: 原始字符串
note: 如果匹配到的全字符串有多个,每个都会执行一次函数

一个简单的使用:
在不用函数之前,你可能会这样:

str = '<div>"hello & world"</div>';
str = str.replace(/&/g,'&amp');
str = str.replace(/</g,'&lt');
str = str.replace(/>/g,'&gt');
str = str.replace(/"/g,'&quot');
str = str.replace(/'/g,'&#39');
console.log(str);
// output: &lt;div&gt;&quot;hello &amp; world&quot;&lt;/div&gt;

用函数可以这样:

str = '<div>"hello & world"</div>';
str = str.replace(/[<>\"\'\&']/g,function(a){
    switch(a){
    case '<':
        return '&lt;';
    case '>':
        return '&gt;';
    case '\"':
        return '&quot;';
    case '\'':
        return '&#39;';
    case '\&':
        return '&amp;';
    }
});
console.log(str);
// output: &lt;div&gt;&quot;hello &amp; world&quot;&lt;/div&gt;

单词首字母大写

var str = 'please make heath your first proprity';
    str = str.replace(/\b\w+\b/g,function(word){
    return word[0].toUpperCase()+word.slice(1);
});
console.log(str);
// output: Please Make Heath Your First Proprity

或者

var str = 'please make heath your first proprity';
    str = str.replace(/(^|\s)([a-z])/g,function(word,p1,p2){
    return p1 + p2.toUpperCase();
});
console.log(str);
// output: Please Make Heath Your First Proprity
上一篇下一篇

猜你喜欢

热点阅读