正则表达式基础与实践

正则表达式

基本的正则表达式方法:

  1. 字面量:/pattern/attribute
  2. new RegExp(pattern,attribute);
  3. attribute 常用: /g;/i;/m;全局匹配,不区分大小写,多行匹配?

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

  1. search:不执行全局匹配,只返回首次出现的位置,如果不匹配返回-1;
str.search(/pattern/i)
  1. match:查找指定的字符串,根据查找到的个数不同,返回值的形式也不同。
str.match(searchValue)
str.match(regexp)
ex:
匹配一个
var str = "hello world";
str.match("hello")//[]
console.log(str.match("Hello")); // 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)
参数:
第一个参数可以是正则表达式或者字符串:
第二个参数:一个字符串的值,被替换的文本或者生成替换文本的函数:
这里介绍并举例最基础的用法(replace()用法较多)
ex:
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

### RegExp对象方法
1. test()方法:该方法用于检测一个字符串是否匹配某个模式; 基本语法:RegExpObject.test(str);

 var a = "this is lance"
 var b = /this/
 b.test(a)// true
 var c = new RegExp("this")
 c.test(a)//true
  1. exec() 该方法用于检索字符串中的正则表达式的匹配。 基本语法:RegExpObject.exec(string)
 var str = "longen and yunxi";
console.log(/longen/.exec(str)); 
// 打印 ["longen", index: 0, input: "longen and yunxi"]
// 假如没有找到的话,则返回null

### 正则中[]的含义
匹配其中的任意一个字符;
1. [abc]匹配其中任意个字符
2. [^abc]匹配不属于其中的任意一个字符。
3. [0-9]0到9中的任意一个数字。
4. [a-z]任意一个小写字母。
5. (red|blue|green);查找小括号中的任意一项,小括号中的 | 是或者的意思


var str = "abcde";
console.log(str.match(/[bcd][bcd]/)); // ["bc", index: 1, input: "abcde"]

### 元字符 ##

元字符描述
.任意单个字符,换行符除外
\w任意数字字母下划线
\W查找非单词字符等价于[^A-Za-z0-9]
\d等价于[0-9]
\D等价于[^0-9]
\s匹配任意空白字符,包括空格,制表符,换行符等。等价于[\f\n\r\t\v]
\S匹配任意非空白字符等价于[……\f\n\r\t\v]
\b匹配单词边界(单词和空白之间的位置)ex:/er/b/可以匹配never中的er但是不能匹配verb中的er
\B与上面相反

需要转义的字符

需要转义的特殊字符前面加上\。 ex:
^:\^;一下字符需要转义:
^*+.[{|

量词

量词描述
n+匹配至少包含一个n的字符串
n*匹配0个或者多个n的字符串
n?匹配0个或者1个n的字符串
n{x}匹配包含x个n的字符串
n{x,y}包含x到y个n的字符串
n {x,}至少x个n的字符串
n$以n结尾的字符串
^n以n开头的字符串

贪婪模式

针对被量词修饰的表达式匹配行为,如果只想匹配一个在表示贪婪模式的字符后面加上?

var str = "longen<p>我是中国人</p>yunxi<p>我是男人</p>boyboy";
// 贪婪模式 匹配所有字符
console.log(str.match(/<p>.*<\/p>/)[0]); 
// <p>我是中国人</p>yunxi<p>我是男人</p>

// 后面加问号,变成非贪婪模式
console.log(str.match(/<p>.*?<\/p>/)[0]); // <p>我是中国人</p>

正则表达式实战

1. 以数字结尾
var  a = /\d+$/;
var b= 'name2';
a.test(b);
2.去掉空格
a = "lance is cool";
b = /\s/g;
a.replace(b,'');
"lanceiscool"
3.判断字符串是不是由数字组成
var a = '123abb3'
var b = /^[0-9]*$/
b.test(a)
4.电话号码正则
var a = '028-86727548';
var b = /[0-9]{3,4}-\d{7,8}/;
b.test(a)
5. 手机号码正则
var a = '1389058581';
var b = /^1[34578]\d{9}$/;
b.test(a)
6. 去掉字符开头和结尾的空格
var a = ' abbb ';
var b = /^\s+|\s+$/g;
a.replace(b,'');
7.  限制文本框只能输入数字和小数点(二位小数点)

启发性的例子

var str = 'thisIsSpinalTap'; 
str = str.replace(/([a-z])([A-Z])/g,'$1,,$2');str;
//"this Is Spinal Tap"
总结:利用小括号将正则表达式分为两个部分,(当然可以分更多),分别对应于replace中的两个参数。(命名固定$1,$2,$3....)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值