浅谈JavaScript -- 正则表达式
什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式。可用于文本搜索和文本替换。
语法:/正则表达式主体/修饰符(可选)
var patt=new RegExp(pattern,modifiers);
或者更简单的方式:
var patt=/pattern/modifiers;
正则表达式修饰符
| 修饰符 | 描述 |
|---|---|
| i | 执行对大小写不敏感的匹配。 |
| g | 行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |
正则表达式模式
| 表达式 | 描述 |
|---|---|
| [abc] | 查找方括号之间的任何字符。 |
| [^abc] | 查找方括号以外的任何字符。 |
| [0-9] | 查找任何从 0 至 9 的数字。 |
| (x|y) | 查找任何以 | 分隔的选项。 |
| {n,m} | 匹配长度。 |
| . | 任何单个字符。 |
| \ | 转义字符。 |
量词:
| 量词 | 描述 |
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串。 |
| n* | 匹配任何包含零个或多个 n 的字符串。 |
| n? | 匹配任何包含零个或一个 n 的字符串。 |
| ?=n | 匹配任何其后紧接指定字符串 n 的字符串。即n前面的。 |
| ?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
var str="name=adoctors;age=24;";
console.log(str.match(/[^=;]+(?==)/g));
//[ 'name', 'age' ]
console.log(str.match(/[^=;]+(?!=)/g));
//[ 'nam', 'adoctors', 'ag', '24' ]
RegExp 对象方法
| 方法 | 描述 |
|---|---|
| test | 检索字符串中指定的值。返回 true 或 false。 |
| exec | 检索字符串中指定的值。返回找到的值,并确定其位置。没有匹配到返回null。 |
test方法使用g时,两侧使用时,会出现lastIndex问题。
var str='hello',patt=/e/g;
function fun(){
console.log(patt.lastIndex);
console.log(patt.test(str));
}
fun(); //0,true
fun(); //2,false
fun(); //0,true
fun(); //2,false
//解决方案:
1、不用g
2、在第二次使用前设置patt.lastIndex=0;即可。
支持正则表达式的string对象的方法
| 方法 | 描述 |
|---|---|
| match | 检索字符串中指定的值。找到一个或多个匹配到的结果,并输出一个数组。没有匹配到返回null。 |
| replace | 用指定的值替换对应的值。 |
| split | 将字符串分割成数组。 |
例:在一段文本的每个行首跟行尾加上p标签
var str='hello adoctors!';
var patt=/o/gi;
console.log(str.match(patt)); //[ 'o', 'o', 'o' ]
console.log(str.split(patt)); //[ 'hell', ' ad', 'ct', 'rs!' ]
//split第二个参数设置返回的数组的最大长度
console.log(str.split(patt,2)); //[ 'hell', ' ad']
var strs=`
aaaa\n
bbbbbbbbbbbb\n
cccccc\n`;
var strs2=str.replace(/^/gm,'<p>').replace(/$/gm,'</p>');
//replace方法第二个参数可以是函数
let str3=str.replace(patt,function($0,$1,$2){
console.log($0) //匹配到的元素 o,o,o
console.log($1) //本次匹配到元素对应的位置 //4,8,11
console.log($2) //要匹配的目标字符串 //hello adoctors!,hello adoctors!,hello adoctors!
return 2;
})
console.log(str3) //hell2 ad2ct2rs!
console.log(str) //hello adoctors!
常用的正则表达式:
26个大写字母 [A-Z]
26个小写字母 [a-z]
0-9数字 [0-9] 或\d 当字母为大写是为非:\W非数字
空白字符 \s \S非空
包括大小写字母,下划线,0-9 [A-Za-z0-9_] 或\w
匹配中文:[\u4e00-\u9fa5] //中文ACALL码的范围
行首行尾空格:^\s*|\s*$ //首行出现任意个空格或者尾行出现任意个空格(任意表示也可以没有空格)
检测密码强度正则/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
//去除html标签行内样式
var style=`<span style="color:red;">hello adoctors!</span>`;
var pat=/style=\"(.*)\"/g;
console.log(style.replace(pat,'')); //<span >hello adoctors!</span>
浅谈JavaScript -- 正则表达式的更多相关文章
- 浅谈JavaScript中的正则表达式(适用初学者观看)
浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...
- 浅谈javascript函数节流
浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈JavaScript浮点数及其运算
原文:浅谈JavaScript浮点数及其运算 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...
- 浅谈 JavaScript 编程语言的编码规范
对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...
- 浅谈javascript的原型及原型链
浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...
- 浅谈JavaScript中的null和undefined
浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...
- [转载]浅谈JavaScript函数重载
原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...
- 【javascript】浅谈javaScript的深拷贝
前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时 ...
随机推荐
- Web前端理论知识记录
Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...
- PHP基于单例模式编写PDO类的方法
一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...
- Selenium-js弹窗浮层
学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性 ...
- 7 Python 数据类型—列表
列表(list)是Python以及其他语言中最常用到的数据结构之一.Python使用使用中括号 [ ] 来解析列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置, ...
- codeforces 589G G. Hiring(树状数组+二分)
题目链接: G. Hiring time limit per test 4 seconds memory limit per test 512 megabytes input standard inp ...
- 3.1 第一个场景 HelloWorldScene
HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos ...
- sws_scale函数的用法-具体应用
移植ffmpeg过程中,遇到swscale的用法问题,所以查到这篇文章.文章虽然已经过去很长时间,但是还有颇多可以借鉴之处.谢谢“咕咕鐘". 转自:http://guguclock.blog ...
- noip前打板子 qwq
在某咕上打了一晚上的模板 感觉还好... #include<bits/stdc++.h> #define LL long long using namespace std; inline ...
- org.springframework.web.client.HttpClientErrorException: 400 null
异常代码: org.springframework.web.client.HttpClientErrorException: 400 null 已解决. 百度了一下400代表无法解析请求. 说明请求是 ...
- go语言执行windows下命令行的方法
转自:http://www.jb51.net/article/61727.htm 在golang里执行windows下的命令行,例如在golang里面调用 del d:\a.txt 命令 packag ...