JavaScript中有关正则表达式的知识(一)

支持正则的String对象方法

  1. match()
    作用: 该方法用于在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配。类似于indexOf()或者lastIndexOf();
    基本语法: stringObject.match(searchValue) 或者stringObject.match(regexp)
    返回值:
      - 存放匹配成功的数组; 它可以全局匹配模式,全局匹配的话,它返回的是一个数组。如果没有找到任何的一个匹配,那么它将返回的是null;
      - 返回的数组内有三个元素,第一个元素的存放的是匹配的文本,还有二个对象属性index属性表明的是匹配文本的起始字符在stringObject中的位置,input属性声明的是对stringObject对象的引用
    实例:
var str = "hello world";
console.log(str.match("hello")); // ["hello", index: 0, input: "hello world"]
console.log(str.match("Helloy")); // null
console.log(str.match(/hello/)); // ["hello", index: 0, input: "hello world"]
// 全局匹配
var str2="1 plus 2 equal 3"
console.log(str2.match(/\d+/g)); //["1", "2", "3"]
  1. replace()
    作用: 该方法用于在字符串中使用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子字符串;
    基本用法: stringObject.replace(regexp/substr,replacement);
    返回值: 返回替换后的新字符串
    注意: 字符串的stringObject的replace()方法执行的是查找和替换操作,替换的模式有2种,既可以是字符串,也可以是正则匹配模式,如果是正则匹配模式的话,那么它可以加修饰符g,代表全局替换,否则的话,它只替换第一个匹配的字符串;
      replacement 既可以是字符串,也可以是函数,如果它是字符串的话,那么匹配的将与字符串替换,replacement中的$有具体的含义,如下:
      $1,$2,$3….\(99 含义是:与regexp中的第1到第99个子表达式相匹配的文本。可以看下面的例子   \)& 的含义是:与RegExp相匹配的子字符串。
      lastMatch或RegExp[“\(_”]的含义是:返回任何正则表达式搜索过程中的最后匹配的字符。   lastParen或 RegExp[“\)+”]的含义是:返回任何正则表达式查找过程中最后括号的子匹配。
      leftContext或RegExp[“\(`”]的含义是:返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。   rightContext或RegExp[“\)’”]的含义是:返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
var str = "hello world";
// 替换字符串
var s1 = str.replace("hello","a");
console.log(s1);// a world
// 使用正则替换字符串
var s2 = str.replace(/hello/,"b");
console.log(s2); // b world
 
// 使用正则全局替换 字符串
var s3 = str.replace(/l/g,'');
console.log(s3); // heo word
 
// $1,$2 代表的是第一个和第二个子表达式相匹配的文本
// 子表达式需要使用小括号括起来,代表的含义是分组
var name = "longen,yunxi";
var s4 = name.replace(/(\w+)\s*,\s*(\w+)/,"$2 $1");
console.log(s4); // "yunxi,longen"
 
var str = '123-mm';
var strReg = str.replace(/(\d+)-([A-Za-z]+)/g,'$2');
console.log(strReg)//mm 上面那段$2这个就是表示正则第二组个匹配到的内容,也就是说$1,$2.. 表示的是第几个括号匹配到的内容
 
// $& 是与RegExp相匹配的子字符串
var name = "hello I am a chinese people";
var regexp = /am/g;
if(regexp.test(name)) {
//返回正则表达式匹配项的字符串
console.log(RegExp['$&']); // am
 
//返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。
console.log(RegExp["$'"]); // a chinese people
 
//返回被查找的字符串从字符串开始的位置到最后匹配之前的位置之间的字符。
console.log(RegExp['$`']); // hello I
 
// 返回任何正则表达式查找过程中最后括号的子匹配。
console.log(RegExp['$+']); // 空字符串
 
//返回任何正则表达式搜索过程中的最后匹配的字符。
console.log(RegExp['$_']); // hello I am a chinese people
}
 
// replace 第二个参数也可以是一个function 函数
var name2 = "123sdasadsr44565dffghg987gff33234";
name2.replace(/\d+/g,function(v){
console.log(v);
// 第一次打印123
// 第二次打印44565
// 第三次打印987
// 第四次打印 33234
});

3.search 方法
作用: 该方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的字符串
基本语法: stringObject.search(regexp);
返回值: 该字符串中第一个与regexp对象相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回-1;
注意点: search()方法不执行全局匹配,它将忽略标志g,

var str = "hello world,hello world";
// 返回匹配到的第一个位置(使用的regexp对象检索)
console.log(str.search(/hello/)); // 0
// 没有全局的概念 总是返回匹配到的第一个位置
console.log(str.search(/hello/g)); //0
 
console.log(str.search(/world/)); // 6
 
// 如果没有检索到的话,则返回-1
console.log(str.search(/longen/)); // -1
 
// 我们检索的时候 可以忽略大小写来检索
var str2 = "Hello";
console.log(str2.search(/hello/i)); // 0
  1. split()
    作用:把一个字符串分割成字符数组
    基本语法:StringObject.split(separator,limit)
    separator可以是字符串或正则表达式
    limit指定返回的数组的最大长度
    返回:字符串数组,返回的数组中的字串不包括 separator 自身。
    注意:split() 方法不改变原始字符串。
    如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
    如果不设参数,即str.split();返回原字符串

支持正则的REGEXP对象方法

  1. test()方法
    作用: 该方法用于检测一个字符串是否匹配某个模式;
    基本语法: RegExpObject.test(str);
    返回: 返回true,否则返回false;
var str = "longen and yunxi";
console.log(/longen/.test(str)); // true
console.log(/longlong/.test(str)); //false
 
// 或者创建RegExp对象模式
var regexp = new RegExp("longen");
console.log(regexp.test(str)); // true
  1. exec()方法
    作用: 该方法用于检索字符串中的正则表达式的匹配
    基本语法: RegExpObject.exec(string)
    返回值: 返回一个数组,存放匹配的结果,如果未找到匹配,则返回值为null;
    注意点: 该返回的数组的第一个元素是与正则表达式相匹配的文本
    该方法还返回2个属性,index属性声明的是匹配文本的第一个字符的位置;input属性则存放的是被检索的字符串string;该方法如果不是全局的话,返回的数组与match()方法返回的数组是相同的。
var str = "longen and yunxi";
console.log(/longen/.exec(str));
// 打印 ["longen", index: 0, input: "longen and yunxi"]
 
// 假如没有找到的话,则返回null
console.log(/wo/.exec(str)); // null

部分摘自:正则表达式

posted @ 2020-06-11 05:25  zdkk  阅读(56)  评论(0)    收藏  举报