正则表达式

2020-07-21  本文已影响0人  komallqh

正则表达式创建方式

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);              //  /d(b+)d/g
console.log(myRe.source);       //  d(b+)d
console.log(myRe.lastIndex);    //5
console.log(myArray);           //['dbbd','bb',index:1,input:'cdbbdbsbz']
//执行后
//对象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. 正则对象
//有g
【匹配文本,子表达式,index,input】,RegExpObject.lastIndex会指向下一个匹配的字符的索引;
可以反复调用exec来遍历字符串中匹配的文本,当exec找不到时就会返回null,lastIndex = 0;
注:若遍历一次后想重新开始遍历,需要lastIndex = 0

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

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

var str = "Visit W3School";
var patt1 = new RegExp("W3School");

var result = patt1.test(str);  //true
  1. String对象(4种相关方法 )
//没有子表达式情况
//有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]


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


var str="Visit W3School!"
document.write(str.search(/w3school/))  //-1

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'");
  );
"hello".split("", 3)    //可返回 ["h", "e", "l"]

通过标志进行高级搜索

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

()[]{}

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/

上一篇下一篇

猜你喜欢

热点阅读