加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式笔记(二)

发布时间:2020-12-14 01:16:04 所属栏目:百科 来源:网络整理
导读:JS 中的正则表达式 概述 在 JS 中,正则表达式是个 RegExp 对象,具有 exec , test 方法。而在 String 对象中,也存在 match , replace , search , split 操作正则表达式的方法。 声明 JS 中的正则表达式有两种声明方式(对象字面量 / 构造函数),都会

JS 中的正则表达式

概述

在 JS 中,正则表达式是个 RegExp 对象,具有 exectest 方法。而在 String 对象中,也存在 matchreplacesearchsplit 操作正则表达式的方法。

声明

JS 中的正则表达式有两种声明方式(对象字面量 / 构造函数),都会生产一个 RegExp 对象的实例。

/pattern/flags
new RegExp(pattern[,flags])

RegExp 对象

实例

var pattern = /quicks(brown).+?(jumps)/ig;
var pattern = new RegExp("quicks(brown).+?(jumps)","ig");

实例之后的 pattern 对象就具有以下属性:

  • lastIndex:下次开始匹配的字符串位置,若是无设置全局模式,会始终为 0
  • ignoreCase:是否设置忽略大小写模式
  • global:是否设置了全局匹配模式
  • multiline:是否设置了多行模式
  • source:正则表达式的文本内容

注意使用构造函数声明正则表达式的时候,需合理使用转义符。

方法

RegExp.exec 检索字符串中指定的值。返回一个结果数组。该方法总是返回单词匹配的结果。

在正则表达式设置了 g 模式的情况下,会同时更新 RegExp 对象的 lastIndex 属性。

var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
// console.log(result)
// ["Quick Brown Fox Jumps","Brown","Jumps"]

var pattern = /ab*/g;
var str = 'abbcdefabh';
var matchArray;
while ((matchArray = pattern.exec(str)) !== null) {
  var msg = 'Found ' + matchArray[0] + '. ';
  msg += 'Next match starts at ' + pattern.lastIndex;
  //console.log(msg);
  // Found abb. Next match starts at 3
  // Found ab. Next match starts at 9
}

使用循环的时候,不要把正则表达式的操作放置在循环体中(这样每次都会重新生成 RegExp 对象),同时必须设置全局模式,可能会造成死循环。

RegExp.test 执行检索字符串中指定值的操作。返回 truefalse

var pattern = /^d{4}-d{2}-d{2}$/;
var result = re.test('2010-12-20');

console.log(result)
// true

在正则表达式设置了 g 模式的情况下,跟 RegExp.exec 一样,会同时更新 RegExp 对象的 lastIndex 属性。

var pattern = /^d{4}-d{2}-d{2}$/g;
pattern.test('2010-12-20'); // true
pattern.test('2010-12-20'); // false

RegExp.test 在匹配成功之后,各个捕获分组的文本会保存下来,用 RegExp.$1RegExp.$2··· 就可以获得,不过,保存整个表达式匹配文本的 RegExp.$0 并不存在。

String 对象

方法

String.match 返回一个结果数组或null

在正则表达式设置了 g 模式的情况下,match 默认返回所有可能的匹配结果。

var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var re = /[A-E]/gi;
var matches = str.match(re);

console.log(matches);
// ['A','B','C','D','E','a','b','c','d','e']

如果正则表达式没有设置 g 模式,那么 match 方法返回的结果与 RegExp.exec() 一致。

var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var re = /[A-E]/i;
var matches_1 = str.match(re);
var matches_2 = re.exec(str)

console.log(matches_1,matches_2)

//[ 'A',index: 0,input: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ]

该返回结果包含匹配的字符串,还有一个额外的 index 属性,表示匹配字符串的位置,input 属性即是所传入的字符串。

String.search 返回第一次匹配的位置或 -1

该方法用来寻找某个正则表达式在字符串中第一次匹配成功的位置,失败的时候返回 -1

这个方法只能找到“第一次”,即使设置了 g 模式,结果也不会有任何变化,所以如果需要使用一个正则表达式多次验证字符串,调用该方法判断结果是否为 0,是更好的办法。

"1234".search(/^d+$/g) == 0 // true
"5678".search(/^d+$/g) == 0 // true

var pattern = /^d+$/g;
pattern.test("1234"); // true
pattern.test("5678"); // false

String.split 使用一个正则表达式来切割字符串。返回数组

正则表达式是否设置了g模式对结果没有影响。

var matchArray = "a b c".split(/s+/);

console.log(matchArray);
// ["a","b","c"]

也可以设置第二个参数 limit,指定返回数组的数目。在 JS 中,该参数取值的结果如下

取值 结果
limit < 0 || limit > n 等同于未指定
0<=limit<=n 返回一个包含 n 元素的数组
var matchArray = "a b c".split(/s+/,2);

console.log(matchArray);
// ["a","b"]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读