目录
replace(searchvalue,newvalue) 方法
一.正则表达式基础掌握
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可用于所有文本搜索和文本替换的操作。
再通俗的说就是它是一种按照某种规范找你到想操作的字符串,比如你想搜索字符串中的数字,又或者你想判断字符串文本是否又字母形式组成,都可以通过正则来实现。下面是正则的规范语法。
/正则表达式主体/修饰符(可选)
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。接下来我们详细介绍。
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
正则元字符
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符。
请在菜鸟教程上查看所有元字符。
字符组
[所有大写和小写字母、所有数字、所有标点符号和一些其他符号]
方括号用于查找某个范围内的字符,如果没有像+ * ?之类的限定符,正则针对的是字符串中的每个字符,而不是连续的字符串,也就是说针对 18acjkb 这样的字符串,[abc]匹配的只是18acjkb 中 a c b 这三个字符(满足单个字符是abc中的一个的字符)
举几个实例:
[abc]查找字符串中所有的a字母 b字母 c字母; 匹配 [...] 中的所有字符
[a-z]查找所有小写字母; a-z表示一个区间
[^ABC] 排除行字符组匹配除了 [...] 中字符的所有字符
[0-9]查找任何从 0 至 9 的数字。
特殊点的:
[\s\S]匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
\w 等价于 [A-Za-z0-9_] 匹配字母、数字、下划线。 \W:用于匹配所有与\w不匹配的字符 /\w/
. 等价于[^\n\r] 匹配除换行符(\n、\r)之外的任何单个字符 /./
注意:
- . 特殊字符在中括号表达式时 如 [.] 只会匹配 .字符,等价于 \.,而非匹配除换行符 \n 外的所有字符。
- ^ 指的是匹配字符串开始的位置;[^指定字符串] 指的是除指定字符串以外的其他字符串
非打印字符
特殊字符
所谓特殊字符,就是一些有特殊含义的字符。许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
常用元字符
限定符
限定符(也有叫做量词的)用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配,主要有提供计数功能的元字符*+?,以及区间量词{n,m}
贪婪
* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
例子:
<h1>正则表达式</h1>
一般来说,如果我们想匹配<h1>标签,可以使用 /<.*>/ 来进行正则匹配,可当我们进行匹配时发现匹配的是 <h1>正则表达式</h1> 。原因正是限定符贪婪。
非贪婪:如果您只需要匹配开始和结束 h1 标签,/<.*?>/ 只匹配 <h1>。
结论:通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。
定位符
定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
字符 | 描述 | 例子Hello |
---|---|---|
^ | 匹配输入字符串开始的位置。 | /^He/ 匹配He |
$ | 匹配输入字符串结尾的位置。 | /lo$/ 匹配lo |
\b | 匹配一个单词边界,即字与空格间的位置。\b放在前和放在后面分别表示匹配开头和匹配结尾 | /\bH/ 匹配H /o\b/ 匹配o |
\B | 非单词边界匹配。就是不匹配单词的开头和结尾 | /\Bll/ 匹配ll |
()原括号
限定多选结构的范围 ,使用括号主要具有分组,选择,预查三个功能。
分组
最经常使用的使用就是分组,好比咱们要匹配如 123-45678 这样的数字,能够用
([0-9]{3})-([0-9]{5})
这样的方式。在这之中圆括号就起到了分组的做用,将123-45678以"-"为分隔符分你成两组进行表示。
选择
我们可以再()中使用|来表示选择关系,我们可以通过 G(oo|aa)d来匹配Good或者Gaad,但注意:对于G(o|oo)d永远只能匹配o而不能匹配oo。原因:分支匹配符号“|”上,当左边的测试知足条件时,将不会匹配右边的表达式。
预查
预查主要分为正向预查和反向预查,也有叫先行断言和后行断言的。
- 正向肯定预查 exp1(?=exp2):查找 exp2 前面的 exp1。
- 正向否定预查 exp1(?!exp2):查找后面不是 exp2 的 exp1。
- 反向肯定预查 (?<=exp2)exp1:查找 exp2 后面的 exp1。
- 反向否定预查 (?<!exp2)exp1:查找前面不是 exp2 的 exp1。
修饰符
标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。下表列出了正则表达式常用的修饰符:
元字符优先级
二. JavaScript中的正则应用
使用字符串方法
search(reg)方法
方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace(searchvalue,newvalue) 方法
参数:searchvalue:必需。规定子字符串或要替换的模式的 RegExp 对象。
newvalue: 必需。一个字符串值。规定了替换文本或生成替换文本的函数。
方法用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串,返回值为一个新字符串。
const n = "abc1234".replace(/[a-z]+/,"change")
// n的值为 "change1234"
match(regexp)方法
参数:regexp:必需。规定要匹配的模式的 RegExp 对象。
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能执行一次匹配。如果没有找到任何匹配的文本将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
"hello abcia ajlfka".match(/\b[a-z]+/g)
// 结果为:Array(3) [ "hello", "abcia", "ajlfka" ]
split(separator,limit)
参数:separator:可选。正则表达式或字符串。
limit:可选。指定返回的数组的最大长度。
split() 方法用于把一个字符串分割成字符串数组。返回值为一个字符串数组。
如果把空字符串 ("") 用作 separator,那么字符串中的每个字符之间都会被分割。
注意: split() 方法不改变原始字符串。
"Hello JavaScript".split() // 返回值Array [ "Hello JavaScript" ]
"Hello JavaScript".split("") // 返回值Array(16) [ "H", "e", "l", "l", "o", " ", "J", "a", "v", "a", … ]
"jaslkd1231djalkf".split(/[1-9]+/) // 返回值 Array [ "jaslkd", "djalkf" ]
使用 RegExp 对象
test(要检测的字符串)方法
最常用的方法,用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
const reg = /[0-9]-[a-z]/;
reg.test("1-a"); // true
exec(需要匹配的字符串)方法
exec() 方法用于检索字符串中的正则表达式的匹配。如果字符串中有匹配的值返回该匹配值,否则返回 null。
var str="086-15911112233";
var patt=/^[0-9]{3}-[\w]*$/g;
var result=patt.exec(str); // result结果为086-15911112233