文章目录
  1. 1. 1、正则表达式申明
  2. 2. 2、正则表达式修饰符
  3. 3. 3、正则表达式 表达式
  4. 4. 4、正则表达式 元字符
  5. 5. 5、正则表达式 量词
  6. 6. 5、正则表达式 方法
  7. 7. 6、正向断言 (?=x)
  8. 8. 7、例题应用

1、正则表达式申明

  • 字面量
1
var regex=/abc/;
  • Regex对象的构造函数
1
var regext = new Regex("abc")

2、正则表达式修饰符

  • i 忽略大小写都匹配
1
2
3
var regex=/abc/i;
var str="ABC"
regext.test(str)返回true,可以匹配
  • g 全局匹配(查找所有匹配而非在找到第一个匹配后停止)
1
2
3
var regext=/abc/g;
var str="abcabcabc";
str.match(regex) 返回大小为3,每项为abc的数组
  • m 执行多行匹配
1
2
3
var reg = /^a/gm;
var str = "abcade\na";
str.match(reg) 返回大小为2,每项为a的数组

3、正则表达式 表达式

  • [] 匹配一位 里面是区间 如0-9A-z
1
2
3
var reg = /[1234567890][1234567890][1234567890]/g;
var str = "12309u8498456415648941561";
str.match(reg) 返回123 849 845 641 564 894 156
  • [^] 非
1
2
3
var reg = /[^a][^b]/;
var str = "cdab";
返回cd
  • () 反向引用
    一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素[1],……[n]。

应用1

1
2
3
4
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);

应用2

1
2
3
var str = "aabb";
var reg = /(\w)\1(\w)\2/;
返回aabb同时返回子项a和b

这个表达式输出 “Smith, John”。

exec() match() 都是返回匹配到的数组,反向引用如果有关键字g,match和exec返回的结果则不一样 match匹配不到字串 exec 会改变lastindex(参考本文下方lastindex)

4、正则表达式 元字符

  • \w === [0-9A-z_]
  • \W === [^\w]
  • \d === [0-9]
  • \D === [^\d]
  • \s === [\t\n\r\v\f ]5个加空格
  • \S === [^\s]
  • b === 单词边界
    匹配一个词的边界。一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者没有其他“字”字符在其前面的位置。注意,一个匹配的词的边界并不包含在匹配的内容中换句话说,一个匹配的词的边界的内容的长度是0。
    • /\bm/匹配“moon”中的‘m’;
    • /oo\b/并不匹配”moon”中的’oo’,因为’oo’被一个“字”字符’n’紧跟着。
    • /\w\b\w/将不能匹配任何字符串,因为在一个单词中间的字符永远也不可能同时满足没有“字”字符跟随和有“字”字符跟随两种情况。
  • B === 非单词边界

5、正则表达式 量词

  • n+ {1,} 1到正无穷
1
2
3
var reg = /\w+/;
var str = "abc";
返回abc
  • n* {0,} 0到正无穷
  • n? {0,1} 0到1
  • n{x} {x} x
  • n{x,y}{x,y} x到y
  • n{x,}{x,} x到正无穷
  • ^ 开头
  • $ 结尾

5、正则表达式 方法

方法 描述
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
split 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法。

exec

1
2
3

var reg = /^\d|\d$/g;
var str = "12fdsfds54324fdsf123sdf323";

如上代码所示,exec方法每次查找,都会记录index,一直向后查找,知道找不到位置,我们可以手动修改lastindex来改变查找,必须加g 不然index就不会变了

6、正向断言 (?=x)

1
2
3
var str = "abaaa";
var reg = /a(?=b)/g //b是条件不参与筛选; a后面跟着b的那个a
var reg = /a(?!b)/g //后边不跟b的a

7、例题应用

  • 正则表达式IP地址验证
    IPv4的地址格式,一共4段,每段之间用逗号分隔,每段都是0-255之间的十进制数值
1
2
3
4
string pattern = @"((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)";
string input = "net:tcp//192.168.5.173:65535/MyService";
Regex reg = new Regex(pattern);
var ret= reg.Matches(input);

将0-255用正则表达式来表示,可以分为以下几段


前三段重复三次,所以最后为

((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)

备注: 1\d{2}|[1-9]?\d 这里|前后的顺序不可颠倒,先匹配3位数的,如果顺序颠倒,线匹配到2位就不匹配三位了

转自:https://www.cnblogs.com/olive987/p/5844501.html

  • 替换应用

    • 自定义替换1

      1
      2
      3
      4
      5
      6
      7
      8
      9

      var reg = /(\w)\1(\w)\2/;
      var str = "aabb";
      console.log(str.replace(reg, "$2$2$1$1")); //替换bbaa
      //自定义替换
      console.log(str.replace(reg, function ($, $1, $2) { //第一个匹配全局 第二个第一个子表达式 第三个 第二个子表达式

      return $2 + $2 + $1 + $1;
      }));
    • 自定义替换1 the-first-name 替换为 theFirstName

      1
      2
      3
      4
      5
      var reg = /-(\w)/g;
      var str = "the-first-name";
      str.replace(reg, function ($, $1) {
      return $1.toUpperCase();
      })
  • 去重

1
2
3
var str = "aaaaaaaaabbbbbbbbbbbbbccccccccccccc";
var reg = /(\w)\1*/g;
str.replace(reg, "$1");
  • 金钱格式
1
2
3
4
var str = "10000000000";
//100.000.000;
var reg = /(?=(\B)(\d{3})+$)/g;
console.log(str.replace(reg,"."));
文章目录
  1. 1. 1、正则表达式申明
  2. 2. 2、正则表达式修饰符
  3. 3. 3、正则表达式 表达式
  4. 4. 4、正则表达式 元字符
  5. 5. 5、正则表达式 量词
  6. 6. 5、正则表达式 方法
  7. 7. 6、正向断言 (?=x)
  8. 8. 7、例题应用