javascript中的正则

释放双眼,带上耳机,听听看~!

一、RegExp对象

构造正则表达式:


1
2
3
4
5
6
1javascript//方式1:
2var re = /\w+/;   //最常用的方式
3
4//方式2:
5var re = new RegExp("\\w+");  //注意转义
6

1. reg.test(str)

描述:test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。


1
2
3
4
5
6
7
8
9
10
11
12
13
1javascriptfunction testinput(re, str){
2    var midstring;
3    if (re.test(str)) {
4        midstring = " contains ";
5    } else {
6        midstring = " does not contain ";
7    }
8    console.log(str + midstring + re.source);
9}
10
11testinput(/c{2}/, 'cainiao');
12//"cainiao does not contain c{2}"
13
  • reference: MDN参考

2. reg.exec(str)方法

  • exec() 方法为指定的一段字符串执行搜索匹配操作。它的返回值是一个数组或者 null。


1
2
3
4
5
1javascriptvar re = /d(b+)(d)/ig;
2var result = re.exec("cdbBdbsbz");
3console.log(result);
4//["dbBd", "bB", "d", index: 1, input: "cdbBdbsbz"]
5
  • 返回的数据:
对象 属性/索引 描述 例子
result [0] 正则表达式最后的匹配项 dbBd
[1], …[ n ] 子表达式匹配项 [1] = bB [2] = d
index 第一个匹配项在原字符串中的索引 1
input 方法输入的参数字符串 cdbBdbsbz
re lastIndex 下一次执行匹配开始索引的位置. 5
ignoreCase 指"i" 标识是否启用 true
global 指"g" 标识是否启用 true
multiline 指"m" 标识是否启用 false
source 正则表达式的文本表示 d(b+)(d)

1
1
  • reference:MDN参考

二、String对象

1. str.search(reg) vs reg.test(str)

*描述:search() 方法执行一个查找,看该字符串对象与一个正则表达式是否匹配。参数reg为一个正则表达式对象,否则隐式调用new RegExp(reg)进行转换。
如果匹配成功,则 search 返回正则表达式在字符串中首次匹配项的索引。否则,返回 -1。


1
2
3
4
5
6
7
8
9
10
11
1javascriptfunction testinput(re, str){
2  var midstring;
3  if (str.search(re) != -1){
4    midstring = " contains ";
5  } else {
6    midstring = " does not contain ";
7  }
8  console.log (str + midstring + re);
9}
10testinput(/db*/, 'sdbbdee'); //sdbbdee contains /db*/
11

*reference: MDN参考

2. str.match(reg) vs reg.exec(str)

  • 描述:当字符串匹配到正则表达式(regular expression)时,match() 方法会提取匹配项。reg参数为一个正则对象,若不是,则隐式地调用new RegExp(reg) 进行转换。返回数组,不匹配返回null。


1
2
3
4
5
6
1javascriptvar str = "For more information, see Chapter 3.4.5.1";
2var re = /(chapter \d+(\.\d)*)/i;  //不是用g的情况
3var found = str.match(re);
4console.log(found);
5//["Chapter 3.4.5.1", "Chapter 3.4.5.1", ".1", index: 26, input: "For more information, see Chapter 3.4.5.1"]
6

1
2
3
4
5
1javascriptvar str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
2var regexp = /[A-E]/gi;  //使用g时,found不存在index和input属性
3var found = str.match(regexp);
4//['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
5

*reference:MDN参考

3. str.replace(regexp|substr, newSubStr|function[, flags])

  • 描述:replace() 方法使用一个替换值(replacement)替换掉一个匹配模式(pattern)在原字符串中某些或所有的匹配项,并返回替换后的字符串。这个替换模式可以是字符串或者正则表达式,替换值可以是一个字符串或者一个函数。

  • 参数

regexp:
一个 RegExp 对象。该正则所匹配的内容会被第二个参数的返回值替换掉。
substr:
一个要被 newSubStr 替换的字符串。
newSubStr:
替换掉第一个参数在原字符串中的匹配部分。该字符串中可以内插一些特殊的变量名。
function:
一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。该函数的参数描述请参考 Specifying a function as a parameter 小节。.
flags:
注意:flags 参数在 v8 内核(Chrome and NodeJs)中不起作用。一个字符串,用来指定 regular expression flags 或其组合。在 String.replace method 中使用 flags 参数不是符合标准。使用一个带有相应标志(flags)的正则表达式(RegExp)对象来代替此参数。该参数的值应该是下面的一个或多个字符,具体作用见下:
g 全局替换
i 忽略大小写
m 多行模式

  • 返回:

一个新字符串,其中匹配模式的某些或所有匹配项被替换为替换值。该方法并不改变调用它的字符串本身,而只是返回替换后的字符串.


1
2
3
4
5
6
1javascriptvar re = /apples/gi;
2var str = "Apples are round, and apples are juicy.";
3var newstr = str.replace(re, "oranges");
4print(newstr);
5//"oranges are round, and oranges are juicy."
6

等同于:


1
2
3
4
5
1javascriptvar str = "Apples are round, and apples are juicy.";
2var newstr = str.replace("apples", "oranges", "gi");
3print(newstr);
4//"oranges are round, and oranges are juicy."
5

1
2
3
4
5
1javascriptvar re = /(\w+)\s(\w+)/;
2var str = "John Smith";
3var newstr = str.replace(re, "$2, $1");
4print(newstr); //'Smith John'
5
  • reference: MDN参考

4. str.split(seperator, limit)

  • 描述:用来分割字符串的字符(串)。separator 可以是一个字符串或正则表达式。 如果忽略 separator,则返回的数组包含一个由原字符串组成的元素。如果 separator 是一个空字符串,则 str 将会转换成一个由原字符串中字符组成的数组。 limit一个整数,限定返回的分割片段数量。split 方法仍然分割每一个匹配的 separator,但是返回的数组只会截取最多 limit 个元素。

*注: 如果 separator 是一个正则表达式,且包含捕获括号(capturing parentheses),则每次匹配到 separator 时,捕获括号匹配的结果将会插入到返回的数组中。然而,不是所有浏览器都支持该特性。 


1
2
3
4
5
1javascriptvar myString = "Hello 1 word. Sentence number 2.";
2var splits = myString.split(/(\d)/);
3console.log(splits);
4//["Hello ", "1", " word. Sentence number ", "2", "."]
5
  • reference: MDN参考

给TA打赏
共{{data.count}}人
人已打赏
安全运维

基于spring boot和mongodb打造一套完整的权限架构(五)【集成用户模块、菜单模块、角色模块】

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索