正则表达式(整理MDN,w3c的笔记)

正则表达式创建方式

  • 字面量
var regExp = /[a-z]\s/i
  • 构造函数
var regExp = new RegExp('[a-z]\\s','i')

特殊字符

\		转义字符
^	
$
*		0次或多次
+ 		1次或多次
? 		0次或1次
		非贪婪
		/e?le?/ 匹配 "angel" 中的 'el'、"angle" 中的 'le' 以及 "oslo' 中的 'l'。
.		除换行符外任一字符;当标志符为s时,点号也可以匹配换行符
(x)		它会匹配 'x' 并且记住匹配项。其中括号被称为捕获括号。$1,$2,...,
x|y
{n}
{n,}
{n,m}
[xyz]	中括号中.(点号)和*可以不用转义,转义也没问题
[^xyz]
[\b]	退格
\b		使用"moon"举例:
		/\bm/匹配“moon”中的‘m’;
		/oo\b/并不匹配"moon"中的'oo',因为'oo'被一个“字”字符'n'紧跟着。
		/oon\b/匹配"moon"中的'oon',因为'oon'是这个字符串的结束部分。这样他没有被一个“字”字符紧跟着。
		/\w\b\w/将不能匹配任何字符串,因为在一个单词中间的字符永远也不可能同时满足没有“字”字符跟随和有“字”字符							跟随两种情况。
\d
\D
\n		换行
\r		回车
\s
\S
\t
\v
\w
\W
\1		在正则表达式中,它返回最后的第n个子捕获匹配的子字符串(捕获的数目以左括号计数)。
		比如 /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的'apple, orange,' 。
\0 = null
(?:x)如果表达式是 /foo{1,2}/,{1,2} 将只应用于 'foo'的最后一个字符'o'。如果使用非捕获括号,则 			{1,2} 会应用于整个 'foo' 单词。 
x(?=y)
(?<= y)x
x(?!y)
(?<!y)x

与正则对象相关的属性

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz"); 
console.log(myRe);
console.log(myRe.source);
console.log(myRe.lastIndex);
console.log(myArray);
//执行后
//对象myRe拥有的属性:source    lastIndex
//对象myArray 拥有的属性:匹配的字符串,子表达式,index 	 input	

你可以使用一个正则表达式创建一个没有分配给变量的对象初始化容器。如果你这样做,那么,每一次使用时都好比在使用一个新的正则表达式。因为这个原因,如果你使用这个未分配给一个变量的正则表达式,你将在随后不能访问这个正则表达式的属性。

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);		//The value of lastIndex is 5


var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);	//The value of lastIndex is 0

与正则对象相关的方法

  1. 正则对象
  • exec方法:返回一个数组/null
//有g
【匹配文本,子表达式,index,input】,RegExpObject.lastIndex会指向下一个匹配的字符的索引;可以反复调用exec来遍历字符串中匹配的文本,当exec找不到时就会返回null,lastIndex = 0;注:若遍历一次后想重新开始遍历,需要lastIndex = 0

//没有g
【匹配文本,子表达式,index,input】,RegExp的lastIndex = 0

//与String.match()的区别就是,无论是否有g都会返回完整细节

  • test方法:一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。
var str = "Visit W3School";
var patt1 = new RegExp("W3School");

var result = patt1.test(str);  //true
  1. String对象(4种相关方法 )
  • match: 一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。
//没有子表达式情况
//有g
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);  	// ["fee ", "fi ", "fo "]
//没有g
var re = /\w+\s/;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);  	
// ["fee ", index: 0, input: "fee fi fo fum", groups: undefined]



//有子表达式情况
//有g :返回所有匹配的字符串;而且没有子表达式,没有input和index属性
str.match(/l([\w]+)/g)  //   str = "Hello world!"结果如下:["llo", "ld"]
//没有g:【匹配文本,子表达式,index,input】
str.match(/w(\w)+/)  //  str = "Hello world!"结果如下:
["world", "d", index: 6, input: "Hello world!", groups: undefined]

  • search
    一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
    search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

var str="Visit W3School!"
document.write(str.search(/W3School/))  //6


var str="Visit W3School!"
document.write(str.search(/w3school/))  //-1
  • replace: 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串
    $1、$2、…、$99 匹配 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
    $& 匹配 与 regexp 相匹配的子串。
    $` 匹配 位于匹配子串左侧的文本。
    $’ 匹配 位于匹配子串右侧的文本。
    $$ 匹配 直接量符号。

name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
return word.substring(0,1).toUpperCase()+word.substring(1);}

//???
name = '"a", "b"';
name.replace(/"([^"]*)"/g, "'$1'");
  );
  • split :一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法
"hello".split("", 3)	//可返回 ["h", "e", "l"]

通过标志进行高级搜索

g:		全局搜索
i:		不区分大小写
m:		多行搜索
s:		允许 . 匹配字符串
u:		使用unicode模式匹配
y:		执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志。

()[]{}

  • 记忆括号
  • []表示字符集
    [abc]匹配a或b或c
  • {}
    {n,m}
    参考链接:
    MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

JavaScript exec() 方法
https://www.w3school.com.cn/js/jsref_exec_regexp.asp
JavaScript match() 方法
https://www.w3school.com.cn/js/jsref_match.asp
JavaScript test() 方法
https://www.w3school.com.cn/js/jsref_test_regexp.asp
JavaScript search() 方法
https://www.w3school.com.cn/jsref/jsref_search.asp
JavaScript split() 方法
https://www.w3school.com.cn/js/jsref_split.asp
JavaScript replace() 方法
https://www.w3school.com.cn/jsref/jsref_replace.asp

正则表达式(括号)、[中括号]、{大括号}的区别小结
https://blog.csdn.net/u010552788/article/details/51019367/

你可能感兴趣的:(javascript)