[JavaScript] js中正则表达式的使用

一、正则表达式的创建

1、通过new RegExp()创建

var 变量名 = new RegExp(/表达式/);

var reg = new RegExp(/123/);
var reg = new RegExp("white","g");

调用 RegExp 对象的构造函数来创建

2、通过字面量创建

var 变量名=/表达式/;,由斜杠/包围而不是引号包围,不需要加引号,不管是数值型还是字符串型。

I.简单模式:只能表示具体的匹配

var reg=/123/;
var reg=/white/g;

II.复合模式:可以使用通配符表达更为抽象的规则模式

var reg=/^\w+$/;
var reg=/^\w+@\w+.[a-zA-Z]{
    
    2,3}(.[a-zA-Z]{
    
    2,3})?$/;

二、正则表达式的使用

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

语法:regexObj.exec(str)

  • regexObj 为编写的正则表达式
  • str 为被测试的文本
  • 返回一个结果数组null
const regex1 = RegExp('foo*', 'g');
const str1 = 'table football, foosball';
let array1;

while ((array1 = regex1.exec(str1)) !== null) {
    
    
  console.log(`Found ${
    
    array1[0]}. Next starts at ${
    
    regex1.lastIndex}.`);
  //  "Found foo. Next starts at 9."
  //  "Found foo. Next starts at 19."
}
2、regexObj.test()

语法:regexObj.test(str)

  • regexObj 为编写的正则表达式
  • str 为被测试的文本
  • 结果返回 true /false ,用来检测str 文本是否符合我们写的正则表达式规范
var reg=/123/;
reg.test(123); //true
reg.test('123'); //true
reg.test('1234'); //true
reg.test('z'); // false 
3、str.match()

语法:str.match(regexp)

  • regexp 为编写的正则表达式
  • str 为被测试的字符串
  • 返回一个结果数组null
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
var str = "Nothing will come of nothing."; 
str.match();   // returns [""]
4、str.matchAll()

语法:str.matchAll(regexp)

  • regexp 为编写的正则表达式
  • str 为被测试的字符串
  • 返回一个迭代器(不可重用,结果耗尽需要再次调用方法,获取一个新的迭代器)
const regexp = RegExp('[a-c]','');
const str = 'abc';
Array.from(str.matchAll(regexp), m => m[0]);
// Array [ "a" ]
5、str.search()

语法:str.search(regexp)

  • regexp 为编写的正则表达式
  • str 为被测试的字符串
  • 如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1
var str = "hey JudE";
var re = /[A-Z]/g;
var re2 = /[.]/g;
console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J"
console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation
6、str.replace()

语法:str.replace(regexp|substr, newSubStr|function)
一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。

  • regexp (pattern) 一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。
  • substr (pattern) 一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
  • newSubStr (replacement) 用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。参考下面的使用字符串作为参数。
  • return一个部分或全部匹配由替代模式所取代的新的字符串
var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(re, "oranges");

// oranges are round, and oranges are juicy.
console.log(newstr);

下面的例子演示了如何交换一个字符串中两个单词的位置,这个脚本使用$1 和 $2 代替替换文本。

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

语法:str.split([separator[, limit]])

  • separator 指定表示每个拆分应发生的点的字符串。
  • limit一个整数,限定返回的分割片段数量
  • return 源字符串以分隔符出现位置分隔而成的一个 Array
var myString = "Hello World. How are you doing?";
var splits = myString.split(" ", 3);

console.log(splits);//["Hello", "World.", "How"]

下例中,split() 方法会查找“0 或多个空白符接着的分号,再接着 0 或多个空白符”模式的字符串,找到后,就将空白符从字符串中移除,nameList 是 split 的返回数组。

var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";

console.log(names);

var re = /\s*(?:;|$)\s*/;
var nameList = names.split(re);

console.log(nameList);

上例输出两行,第一行输出原始字符串,第二行输出结果数组。

Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand 
[ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ] 

三、正则表达式的组成

一个正则表达式可以由简单字符构成,比如/abc/也可以是简单和特殊字符的组合,比如/ab * c/,其中特殊符号也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如^$+

符号 意义
/…/ 代表一个模式的开始和结束
^ 匹配字符串的开始,例如 /^A/ 并不会匹配 “an A” 中的 ‘A’,但是会匹配 “An E” 中的 ‘A’。
$ 匹配字符串的结束,例如 /t$/ 并不会匹配 “eater” 中的 ‘t’,但是会匹配 “eat” 中的 ‘t’。
\n 匹配一个换行符 (U+000A)。
\r 匹配一个回车符 (U+000D)。
\s 任何空白字符
\S 任何非空白字符
\d 匹配一个数字字符,等价于[0-9],/\d/ 或者 /[0-9]/ 匹配"B2 is the suite number."中的’2’
\D 除了数字之外的任何字符,等价于[^0-9],/\D/ 或者 /[^0-9]/ 匹配"B2 is the suite number."中的’B’ 。
\w 匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
\W 任何非单字字符,等价于[^a-zA-z0-9_]
. (小数点)默认匹配除换行符之外的任何单个字符。例如,/.n/ 将会匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不会匹配 ‘nay’。
{n} 匹配前一项n次
{n,} 匹配前一项n次,或者多次
{n,m} 匹配前一项至少n次,但是不能超过m次
n* 匹配前一项0次或多次,等价于{0,},例如/bo*/ 会匹配 “A ghost boooooed” 中的 ‘booooo’ 和 “A bird warbled” 中的 ‘b’,但是在 “A goat grunted” 中不会匹配任何内容。
n+ 匹配前一项1次或多次,等价于{1,},/a+/ 会匹配 “candy” 中的 ‘a’ 和 “caaaaaaandy” 中所有的 ‘a’,但是在 “cndy” 中不会匹配任何内容。
n? 匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1},例如,/e?le?/ 匹配 “angel” 中的 ‘el’、“angle” 中的 ‘le’ 以及 "oslo’ 中的 ‘l’。
x|y 匹配‘x’或者‘y’。例如 /green|red/匹配“green apple”中的‘green’和“red apple”中的‘red’

猜你喜欢

转载自blog.csdn.net/iChangebaobao/article/details/107005253
今日推荐