正则是用来搜索字符串的!!!
正则是用来搜索字符串的!!!
正则是用来搜索字符串的!!!
重要的事儿说三遍,这个是这片文章的结论。javascript
javascript
Chrome Console
主要函数:str.match(regexp)
html
regexp
helloworld
字符串中搜索h
字符而已。array
null
,具体的结果视表达式的不一样而有区别,如今讲了也感觉不到。上面的例子中键0
的返回值就是搜索到的结果。正则写法:java
//
:在两个/
之间写,推荐这种方式,这种方式下,两个/
之间不能什么都不写,由于会发生很神奇的事情--会变成注释符号,致使后面的语法错误...
推荐第一种
实用性技能的学习仍是从实际需求出发比较好,在字符串搜索的应用场景中,最多见的需求是啥?就是在字符串中搜索是否包含另外一个字符串
。jquery
例如在helloworld
中判断是否有h
,或者是否有hello
,在这种状况下,就使用全部为的普通字符就行了,这种状况下,就起到了和indexOf
同样的功能,因此咱们如今咱们能够用正则完成在字符串中搜索是否包含另外一个字符串
的需求了。正则表达式
可是若是正则只能作到这样,那还不如直接用indexOf
,还学啥正则,在上面的栗子中,咱们所要搜索的字符串是已知的
、肯定的
,好比咱们知道咱们要搜索h
、hello
,这些都是已知的
、肯定的
,可是在不少场景中,咱们要搜索的是不肯定的
、只知足必定规则的
。因此就有了格式校验
。api
格式校验
一般出如今表单应用中,好比注册须要填写帐户和密码,而帐户和密码须要知足必定的条件,帐户必须是邮箱、密码必须6-16位字母和数字组合等。数组
这里就出现了对不肯定的
、只知足必定规则的
的字符串的搜索,只要有搜索结果,则就校验经过,无结果,校验则不经过。函数
如何作到呢,那就是替代符
,替代符
能够替代某一种类型的字符,好比数字、字母、回车、换行等等等。学习
替代符
的格式是普通字符前面加\
,好比\d
、\w
等,为啥要加\
呢,由于不加\
就是普通字符了啊。spa
\d
说明:能够完成需求:字符串中是否至少包含一个数字
,这里的数字指的是:01234567890
\D
说明:能够完成需求:字符串中是否彻底不包含数字
,这里的数字指的是:01234567890
\w
说明:能够完成的需求:字符串中是否至少包含一个字符
,这里的字符指的是:1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz_
,或者0-9A-Za-z_
\W
说明:能够完成的需求是:字符串是否彻底不包含字符
,这里的字符指的是:1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjklmnopqrstuvwxyz_
,或者0-9A-Za-z_
\n
:
说明:能够完成的需求是:字符串是否包含至少一个换行符
\t
:
说明:能够完成的需求是:字符串是否包含至少一个制表符
,这里的制表符指的是按Tab
键产生的
说明:能够完成的需求是:字符串是否包含至少一个空白字符
,这里的空白字符指的是换行符
、空白符
、制表符
等
替代任意一个非空白字符:
能够完成的需求是:`字符串是否彻底不包含空白字符`,这里的空白字符指的是`换行符`、`空白符`、`制表符`等
匹配\n
以外的任何字符:.
将以上的几种替换符结合起来,咱们就能够完成一些比较有意思的事了,好比:
说明:栗子1返回null
说明校验经过了,栗子2返回了搜索结果,说明存在非字符,因此校验不经过。
虽然能够作到这种程度,可是依旧不够,好比咱们没法限制长度,或者更精细的控制,好比邮箱格式的限制,匹配连续10000个0等。以abc100000@qq.com
为例,能够看出,邮箱的规则大概是
@
符号@
后面是一个域名。域名又有本身的规则:
.
.
后面以多个字母或者数字组成邮箱的格式校验已经怎么复杂了,更况且若是咱们要限定指定的几个域名呢?因此任重而道远啊,还得接下去学
咱们在0x002中已经能够作到对数量的控制了,即/\d\d\d/
这种形式,可是这种形式是有问题的,若是咱们要匹配10000个0
呢,写10000个/d
可不现实,因此这里必须引入新的符号,那就是数量
。
*
说明:注意,这里说的是表达式,目前先当作字符来理解,意思是匹配o
这个字符0次或者屡次
+
说明:匹配o
这个字符1次或者屡次
3 匹配字表达式0次或者1次:?
 **说明**:匹配`o`这个字符0次或者1次
{n}
,n
为次数
说明:匹配o
这个字符n
次
{n,}
,n
为次数
说明:匹配o
这个字符至少n
次
{n,m}
,n
为最少的次数,m
为最多的次数o
这个字符 n-m
次到目前为止,完成了普通字符
、替代符
、数量
,那咱们能够作的事情可就多了,好比邮箱格式校验
 可是,依旧存在问题,请看下面  咱们在邮箱前面和后面加了空白符和其余符号,经过了校验,这很明显是咱们目前没法解决的,继续往下
^
:$
:gmail
和qq
登陆呢?还得往下啊![]
:abc
中的任意字符
说明:不包含abc
中的任意字符
[a-z]
:
说明:包含a-z0-9
|
说明:是否包含a
或者b
字表达式使用()
来表示,()
内为一个总体。
直接上栗子:
说明:匹配gmail
或者qq
。
说明:其中:1是整个表达式/tel:(\d+)/
的结果,2是子表达式\d+
的结果
在正则中,全部的单个匹配都是子表达式,好比a
、a+
、a{n,m}
等。因此,其实这包含一种递归的思想,因此,全部使用在表达式上的均可以使用在这些之上,好比(ab)+
,能够匹配ababab
。
正则表达式的做用就是
搜索字符串!!!
搜索字符串!!!
搜索字符串!!!
只不过能够搜索不肯定的
、知足某种规则的
的字符串,而这个功能能够引伸出多种使用场景