javascript--40--正则

元字符

正则表达式:是一套规则 字面量:// new RegEXP("这中间就是规则");

  1. 一般用来处理字符串的查询或者替换工作

元字符:

  1. \ 转移符
  2. \d 匹配数字 【0-9】
  3. \D非数字
 var str="123abdfns";
    var reg = /1/;
    console.log(reg.test(str));

结果是true; reg.test(str) 在str 里匹配reg规则 如果匹配成功,返回true 否则false

var str="1a23abdfns";
    var reg = /12/;
    console.log(reg.test(str));

false 正则规则是一套的 不能分开看 12之间有a

 var str="a23abdfns";
    var reg = /\d/;
    console.log(reg.test(str));
</script>

结果是true

  1. \s 空格 注意不是换行
var str="a 23abdfns";
    var reg = /\s/;
    console.log(reg.test(str));

true

  1. \S 非空格
  2. \w 字符(数字、字母、_)
 var str=" ";
    var reg = /\w/;
    console.log(reg.test(str));

空格不在这个范围内 false

  1. \W 除了\w以外的所有
  2. .匹配任意字符 不包括\n \r
  3. \n 换行 \r
var str=" ";
    var reg = /./;
    console.log(reg.test(str));

true

  1. \b 独立部分 单词的边界 左右两边空的部分 单词的起始和结束 连词符 除了\w之外所有的字符都属于连字符 - + * /
  2. \B 非独立的部分
var str="a";
    var reg = /\b/;
    console.log(reg.test(str));

true 只要是个单词哪怕是字母 都有边界 两侧就是边界

var str="a";
    var reg = /\B/;
    console.log(reg.test(str));

false

var str="ab";
    var reg = /\B/;
    console.log(reg.test(str));

在ab之间

var str="a_b";
    var reg = /\b/g;
    console.log(str.replace(reg,6));

结果6a_b6 中间_算一个整体单词

var str ="abdjh";
    var reg =/\ba/;
    console.log(reg.test(str));

true

 var str ="abdjh";
    var reg =/\bd/;
    console.log(reg.test(str));

false

 var str ="ab-bdjh";
    var reg =/\bb/;
    console.log(reg.test(str));

true 因为-是单词边界

量词

写法{} 控制数量 控制的是前一个字符

var str ="1234567";
    var reg =/\d{5,9}/;
    console.log(reg.test(str));

true {5,9}代表最少出现5次 最大9次。

  • {0,} 最少0次 最多无限次 简写:*
  • {1,} 1到正无穷 +
  • {0,1} 可有可无 简写: ?
var str ="bbbbb";
    var reg =/a?/;
    console.log(reg.test(str));

true

var str ="妈你";
    console.log(str.replace(/?/g ,""));

标识符

  1. g global 全局
  2. i 忽略大小写
  3. m 换行匹配
 var str ="bbbbb";
    var reg =/B/i;
    console.log(reg.test(str));

标识符写在斜杠后面

str.match(reg)

match() 字符串的方法 str.match(reg) 会返回一个数组 包含匹配的内容 如果匹配失败就返回null

贪婪和非贪婪

  1. {}量词默认以最高次开始匹配 如果不成功就递减1 知道第一次匹配成功 贪婪模式
  2. 非贪婪模式 从低次开始匹配 量词后面加? 就是非贪婪模式{}?
var str ="293894235653 a 9012384875";
    var reg =/\d{3,}/;
    console.log(str.match(reg));

["293894235653", index: 0, input: "293894235653 a 9012384875", groups: undefined] 贪婪模式

var str ="293894235653 a 9012384875";
    var reg =/\d{3,}?/;
    console.log(str.match(reg));

["293", index: 0, input: "293894235653 a 9012384875", groups: undefined]

var str ="293894235653 a 9012384875";
    var reg =/\d*/g;
    console.log(str.match(reg));

["293894235653", "", "", "", "9012384875", ""] 全局匹配 空格是0字符 所以返回“” 到9012384875之后 计算机并不知道结束 接着找走到引号为止

var str ="293894235653 a 9012384875";
    var reg =/\d+/g;
    console.log(str.match(reg));

["293894235653", "9012384875"]

转义字符\n 换行匹配m

 var str ="123\n456";
    var reg =/^456/m;
    console.log(str.match(reg));

["456", index: 4, input: "123↵456", groups: undefined]

  1. ^开头
var str ="a123b";
    var reg =/^123/g;
    console.log(str.match(reg));

尖括号在非括号里代表以123开始 返回null

  1. $ 结尾
var str ="456\n456";
    var reg =/^456/gm;
    console.log(str.match(reg));

["456", "456"] 可以任意组合gmi 不分顺序 返回的数组有length属性 0是匹配的内容 index是内容在原内容的位置 input是源头内容 length 是返回的个数

子集

被圆括号包起来的部分属于一个整体

var str ="abcccabc";
    var reg =/abc+/g;
    console.log(str.match(reg));

Array(2)0:"abccc" 1:"abc" length:2

var str ="abcccabc";
    var reg =/(abc)+/g;
    console.log(str.match(reg));

["abc", "abc"]

 var str = "abbb ababab baaa cbbb bsss";
        var reg =/\w(\w)\1+/g;

        console.log(str.replace(reg,"2333"));

2333 ababab 2333 2333 2333 \1代表取出第一个分组里的值

 var str = "2018-06-18";
        var reg =/([0-9]+)-([0-9+]+)-([0-9]+)/;
        console.log(str.replace(reg,"$1"));

在replace中用$1取分组一

var str = "2018-06-18";
        var reg =/([0-9]+)-([0-9+]+)-([0-9]+)/;
        console.log(str.replace(reg,"$2/$3/$1"));

06/18/2018

范围词

【0-9】 范围里的字符都是或者关系 满足一个就行

var str ="2198519768";
    var reg =/[0-9]/g;
    console.log(str.match(reg));

["2", "1", "9", "8", "5", "1", "9", "7", "6", "8"]

 var str ="2198519768aakjfhkjadb";
    var reg =/[0-9a-z]/g;//中间不需要逗号
    console.log(str.match(reg));

["2", "1", "9", "8", "5", "1", "9", "7", "6", "8", "a", "a", "k", "j", "f", "h", "k", "j", "a", "d", "b"]

或 |

var str ="abc";
    var reg =/a|b/g;
    console.log(str.match(reg));

["a", "b"]

中文的问题

\u4e00-\u9fa5

 var str ="里都啊";
    var reg =/[\u4e00-\u9fa5]+/g;
    console.log(str.match(reg));

["里都啊"]

非 [^]

var str ="abbc";
    var reg =/[^a]bc+/g;//代表bc前面不能是a
    console.log(str.match(reg));

["bbc"]

 var str = "你好么";
        var reg =/[^\u4e00-\u9fa5]/;

        console.log(reg.test(str));

false 不要中文

var str ="abc";
    var reg =/[abc]+/g;
    console.log(str.match(reg));

["abc"]

特殊意义的 使用转移\

var str ="()abc";
    var reg =/()/g;
    console.log(str.match(reg));

["", "", "", "", "", ""] 因为括号具有特殊的意义

 var str ="()abc";
    var reg =/\(\)/g;
    console.log(str.match(reg));

["()"]

var str ="1234567\nabcd";
    console.log(str.replace(/\d+7$/m ,"666"));

666 abcd

方法

  1. str.match() 找到之后返回数组 一般用来匹配字符串出现的次数 找不到返回null
  2. str.search () 查找第一次出现的位置
var str = "a1b2c3a4b5";
        var reg =/a/g;
        console.log(str.search(reg));

0 只查找第一次

  1. str.replace() 查找替换
 var str = "a1b2c3a4b5";
        var reg =/a/g;
        console.log(str.replace(reg,function(bs){
            console.log(bs);
            return 555;
        }));

a 参数就是查找到的对象 5551b2c35554b5

  1. str.split()拆分成数组
 var str = "a,b,c,d";
        var reg =/,/g;
        console.log(str.split(reg));

["a", "b", "c", "d"]

RegExp

  1. reg.exec() 找到之后返回数组
var str = "abcd";
        var reg =/\w/g;
        console.log(reg.exec(str));
        console.log(reg.exec(str));
        console.log(reg.exec(str));
        console.log(reg.exec(str));

["a", index: 0, input: "abcd", groups: undefined] 2.html:34 ["b", index: 1, input: "abcd", groups: undefined] 2.html:35 ["c", index: 2, input: "abcd", groups: undefined] 2.html:36 ["d", index: 3, input: "abcd", groups: undefined]

  1. reg.test()
var str = "abcd";
        var reg =/a/g;
        console.log(reg.test(str));

存在返回true

脏话过滤

<script type="text/javascript">
        console.log(strFilter("你妈","嘿嘿嘿"));
        function strFilter(str,rstr) {
            var person =["",""];
            var family =["","","",""].join("|");
            for (var i = 0;i<person.length;i++) {
                str = str.replace(new RegExp(person[i]+"["+family+"]+","gm"),rstr);
            }
            return str;
        }
    </script>

打印嘿嘿嘿

猜你喜欢

转载自blog.csdn.net/lxhby520/article/details/80910015
今日推荐