javaScript正则表达式

97 阅读2分钟

正则表达式概念及语法

正则表达式是遗传用于定义某种模式的字符,属于字符串范畴,有原义字符和元字符两种字符组成。

1.原义字符:书写在正则表达式中表示为字面意思的字符

2.元字符:书写在正则表达式中表示为特定的含义的字符

基本元字符、范围元字符、重复元字符、转义元字符、贪婪匹配,和后向引用。

RegExp 对象方法

test()

test() 方法检索字符串中是否存在指定的值。返回值是 true 或 false。

1.var patt1 = new RegExp('e');
2.console.log(patt1.test('some text'));
3.// OUTPUT:true
4.var patt2 = new RegExp('ee');
5.console.log(patt2.test('some text'));
6.// OUTPUT:false

1.// 判断是不是QQ号
2.// 1 首位不能是0  ^[1-9]
3.// 2 必须是 [5, 11] 位的数字 \d{4, 9}
4.var str = '80583600';
5.var regexp = /^[1-9][0-9]{4,10}$/gim;
6.if (regexp.test(str)) {
7.    alert('is');
8.} else {
9.    alert('no');
10.}

exec()

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

1.var patt1 = new RegExp('e');
2.console.log(patt1.exec('some text'));
3.// OUTPUT:e
4.var patt2 = new RegExp('ee');
5.console.log(patt2.exec('some text'));
6.// OUTPUT:null

compile()

compile() 既可以改变检索模式,也可以添加或删除第二个参数

var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free")); // true
// 改变了检索模式
patt1.compile("eee");
document.write(patt1.test("The best things in life are free")); // false


支持正则表达式的 String 对象的方法

search 检索与正则表达式相匹配的值。

1.var str = "Visit W3School!"
2.console.log(str.search(/W3School/))
3.// OUTPUT:6

match 找到一个或多个正则表达式的匹配。

var str="1 plus 2 equal 3"
console.log(str.match(/\d+/g))
// OUTPUT:1,2,3

replace 替换与正则表达式匹配的子串。

1.var str = "Visit Microsoft!"
2.console.log(str.replace(/Microsoft/, "W3School"));
3.// OUTPUT:Visit W3School!

基本元字符:

1、. 匹配任意字符。

2、* 匹配前一个字符出现的次数为0次或多次。

3、? 匹配前一个字符出现的次数为0次或1次。

4、+ 匹配前一个字符出现的次数为1次或多次。

5、^ 匹配以后面的字符开头。

6、$ 匹配以前面的字符结尾。

7、| 匹配|两端出现的字符中的任意一个,表示“或”的意思。


1、利用字面量创建正则表达式:

var reg=/abc/;

 2、利用构造函数创建正则表达式:
 
var reg=new RegExp(“abc”);

 3、创建正则表达式时可以为正则表达式添加修饰符:
 
(1)g,表示全局匹配。

(2)i,表示忽略大小写。

例如:利用字面量创建正则表达式。

      var reg=/a./gi;
      
var str='abcdaefgawdA9fa3eweaa';

例如:利用构造函数创建正则表达式。

  var reg=new RegExp("a.","gi");
  
	var str='abcdaefgawdA9fa3eweaa';
        
**与正则表达式有关的字符串方法:**

	 1、match(reg):


功能:返回字符串匹配正则表达式reg的子串内容。

该功能返回的是一个长得像数组的对象(只匹配第一个子串)或数组(全局匹配)。

例如:match()返回下列格式。

  ["ab", index: 0, input: "abcdaefgawdA9fa3eweaa", groups: undefined]

索引值为0的元素是匹配正则表达式的唯一结果。

index:返回匹配正则表达式的子串的索引值。

input:返回源字符串。

groups:返回正则表达式的分组结果。

结论:凡是利用match()返回的匹配结果都要带下标。

若字符串没有匹配reg的子串,则返回null。

2、search(reg):

功能:返回字符串匹配正则表达式reg的子串位置。

该功能返回的是一个索引值。

若字符串没有匹配reg的子串,则返回-1。

3、replace():

例1:匹配全部都是由原义字符组成的正则表达式。

   var reg=/abc/;
      
var str='今天我学习了abc';

var a=str.match(reg);

var b=str.search(reg);

console.log(a,b);

例2:第一个元字符(.)。

var reg=/a./;

var str='abcdefg';

var a=str.match(reg);

var b=str.search(reg);

console.log(a,b);

例3:第二个元字符(* ? +)

     var str='banana';
      
      var reg1=/an+/;      //以a开头,字符n出现了1次或多次的子串
      
var reg2=/(an)+/;     //字符an出现了1次或多次的子串

var a=str.match(reg1);  //an

var b=str.match(reg2);  //anan

      console.log(a,b);