function fnAllSearch(str,pattern){ var pos = str.search(pattern); var length = str.match(pattern)[0].length; var index = pos+length; var result = []; var last = index; result.push(pos); while(true){ str = str.substr(index); pos = str.search(pattern); if(pos === -1){ break; } length = str.match(pattern)[0].length; index = pos+length; result.push(last+pos); last += index; } return result; } console.log(fnAllSearch('cat23fbat246565sa3dftf44at',/\d+/));//[3,9,17,22]
[8.3]replace():接收两个参数:第一个参数为正则表达式或字符串(待查找的内容)、第二个参数为字符串或函数(替换的内容)
[a]字符串替换
var string = 'cat,bat,sat,fat'; var result = string.replace('at','ond'); console.log(result);//'cond,bat,sat,fat'
[b]正则无/g替换
var string = 'cat,bat,sat,fat'; var result = string.replace(/at/,'ond'); console.log(result);//'cond,bat,sat,fat'
[c]正则有/g替换
var string = 'cat,bat,sat,fat'; var result = string.replace(/at/g,'ond'); console.log(result);//'cond,bond,sond,fond'
[d]函数替换:在只有一个匹配项(即与模式匹配的字符串的情况下,会向这个函数传递3个参数:模式的匹配项、模式匹配项在字符串中的位置、原始字符串。在正则表达式定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……第N个捕获组的匹配项,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串,这个函数返回一个字符串。
[tips]防止跨站脚本攻击xss(css)
function htmlEscape(text){ return text.replace(/[<>"&]/g,function(match,pos,originalText){ switch(match){ case '<': return '<'; case '>': return '>'; case '&': return '&'; case '\"': return '"'; } }); } console.log(htmlEscape('<p class=\"greeting\">Hello world!</p>')); //<p class=" greeting">Hello world!</p> console.log(htmlEscape('<p>Hello world!</p>')); //同上
[9]继承的方法:都返回正则表达式字面量,与创建正则表达式的方式无关。要注意的是toString()和toLocaleString()返回的正则表达式的字符串表示,而valueOf返回的是正则表达式对象本身
[9.1]toString()
[9.2]toLocaleString()
[9.3]valueOf()
var pattern = new RegExp('\\[bc\\]at','gi'); console.log(pattern.toString()); // '/\[bc\]at/gi' console.log(pattern.toLocaleString()); // '/\[bc\]at/gi' console.log(pattern.valueOf()); // /\[bc\]at/gi
[10]局限性:下列为ECMAScript正则表达式不支持的特性
[10.1]匹配字符串开始的结尾的\A和\Z锚(但支持以^和$来匹配字符串的开始的结尾)
[10.2]向后查找(但支持向前查找)
[10.3]并集和交集类
[10.4]原子组
[10.5]Unicode支持(单个字符除外)
[10.6]命名的捕获组(但支持编号的捕获组)
[10.7]s(single单行)和x(free-spacing无间隔)匹配模式
[10.8]条件匹配
[10.9]正则表达式注释
[11]常见实例
[11.1]两种方法找出字符串中所有的数字
[11.1.1]用传统字符串操作
var str1 = 'j1h342jg24g234j 3g24j1'; var array = []; var temp = ''; for(var i = 0; i < str1.length; i++){ var value = parseInt(str1.charAt(i));//如果用number将无法排除空格 if(!isNaN(value)){ temp += str1.charAt(i); }else{ if(temp != ''){ array.push(temp); temp = ''; } } } if(temp != ''){ array.push(temp); temp = ''; } console.log(array);
[11.1.2]用正则表达式完成
var str1 = 'j1h342jg24g234j 3g24j1'; array = str1.match(/\d+/g); console.log(array);
[11.2]敏感词过滤(replace回调函数的应用)
var string = 'FLG是邪教'; var pattern = /FLG|邪教/g; var result = string.replace(pattern,function($0){ var s = ''; for(var i = 0; i < $0.length; i++){ s+= '*'; } return s; }) console.log(result);
[11.3]日期格式化
var array = ['2015.7.28','2015-7-28','2015/7/28','2015.7-28','2015-7.28','2015/7---28']; function formatDate(date){ return date.replace(/(\d+)\D+(\d+)\D+(\d+)/,'$1'+'年'+'$2'+'月'+'$3'+'日') } var result = []; for(var i = 0 ; i < array.length; i++){ result.push(formatDate(array[i])); } console.log(result);
[11.4]获取网页中的文本内容
var str = '<p>refds</p><p>fasdf</p>' var pattern = /<[^<>]+>/g; console.log(str.replace(pattern,''));
[11.5]去除首尾空格的trim()兼容写法
var string = ' my name is littlematch '; console.log(string.replace(/^\s+|\s+$/,''));
希望以上关于javascript中正则表达式的描述,能够对大家有所帮助。
您可能感兴趣的文章: