正则表达式
1、三张图稍微了解一下正则,正则属性的备忘
ps:需要转移的的字符( \ )---- () [] {} \ / ? + * . ^ $ | =
2、正则实例属性,方法
// RegExp实例方法 var pattern = new RegExp("[bc]at",'i') === /[bc]at/i var text = 'asdfasdf asdf asdf asdf asdf '; // 1-exec() //捕获组() //此方法跟String.match(/pattern)类似,但是返回的数组不一样, //match返回匹配整个正则的项(一维数组) //exec(),返回二维数组,[0][0]为匹配整个正则的项,[0][1+]匹配子捕获组的子项 var pattern = /mom ( and dad ( and bady)?)?/gi //---包含2个捕获组,捕获组内嵌 var matches = pattern.exec(text); matches.index; // 匹配到的index matches.input; // 匹配的字符串 //数组长度要看你捕获组的个数 matches[0]; //mom and dad and bady matches[1]; //and dad and bady matches[2] //and bady // 2-text() var result = pattern.test(text);//返回false,true,判断是否有匹配的 // 3-compile() //这个以后用到再回来看,需求好像不大
3、正则的实际应用
(a) 这篇文章出现的导火线,输入法的表情emoji保存数据库出错,需求是过滤所有的emoji,
网上说emoji是":smile:"双冒号这种reg = /\:([^\:]+)\:/g;,
解读: \: 冒号开始 [^\:]+ 非冒号的字符 + 表示1个或多个 \: 其后再加一个冒号 /g全局匹配
但是实践中确实Unicode编码 这种4个字节的reg = /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g;
解读: \uD83C\uDF00-\uD83C\uDFFF | (或) \uD83D\uDC00-\uD83D\uDE4F
1 $scope.$watch('text', function(newValue, oldValue, scope) { 2 $scope.text2 = $scope.text.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, ""); 3 }, false);
(b)解析url
1 var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; 2 3 4 var url = "http://www.ora.com:80/goodparts?q#fragment"; 5 6 var result = parse_url.exec(url); 7 8 var names = ['url','scheme','slash','host','port','path','query','hash']; 9 var blanks =' '; 10 var i; 11 for(i = 0;i < names.length; i++){ 12 console.log(names[i] + ':' + blanks.substring(names[i].length),result[i]); 13 }
结果:
解读:
在这其中我还发现,在[]中,是用不到转义的例如 . ?
最后,若有错漏之处,希望能够指出?在此谢谢
对于正则基础的细节部分,请参考同学http://www.cnblogs.com/DTBelieve/p/5373244.html