wfblog

1、正则表达式

2、字符串


 

正则表达式 

一、正则表达式教程:https://www.w3cschool.cn/zhengzebiaodashi/regexp-metachar.html  或  https://www.imooc.com/learn/706 (推荐,慕课网讲解的比较好)

二、图形化 (可视化) 正则表达式 编辑 工具:https://regexper.com/ (推荐,可以配置在本地的) 或  https://jex.im/regulex (不是很明确) 或  https://www.iteye.com/news/29859 (涉及 五款 这种工具)

三、正则表达式手册:http://tool.oschina.net/uploads/apidocs/jquery/regexp.html  

  正则表达式中的()类似于算数运算中的(),里面运算后的结果和后面运算。

四、在线正则表达式测试  : http://tool.oschina.net/regex/     (这个了,里面忽略了m修饰符)               

               http://tools.jb51.net/tools/regex.asp  (里面测试不正确,这个正则表达式测试包括3个修饰符,还有明确的匹配方法)

1、正则表达式由两种基本字符类型组成:
  a、原义文本字符
  b、元字符

2、字符类:   [ ]             (类匹配的是一个字符
  匹配里面的任意一个字符(不是字符串),如:[abc], a、b、c是独立的,不是一个字符串

3、反向字符类: [^ ]         某一类中取相反的。

4、范围类:[a-z]
  如果范围类中要匹配 - ,只要-字符放在范围类外面就可以 如:[a-z-]

5、预定义类: 使用一种预定好的字符,代表某一种字符类。如:\d 表示 [0-g]的类

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 单词字符(字符、数字下划线)
\W [^a-zA-Z_0-9] 非单词字符

6、边界: (边界不包含字符,但是它描述后面或前面字符的边界所在)

^ 以xxx开始
$ 以xxx结束
\b 单词边界
\B 非单词边界

  说明:单词边界 和 非单词边界  https://mp.weixin.qq.com/s/zSJXdaj5pLw_1I8lUPiKEA

7、m修饰符:

  没有m修饰符,多行字符串,只有一个^和一个$边界。
  有m修饰符,多行匹配,每一行都有一个^和$边界

8、量词:(就是多少次,如果没有量词,则匹配一个连续多个相同的字符的话,就必须使用字符类不断的叠加,如:\d\d\d\d\d\d\d\d)

零次或一次(最多出现一次)
+ 出现一次或多次(至少一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

  在量词后 加上?就可以设置成非贪婪模式

比如说匹配输入串A: 101000000000100       
匹配 两个1之间的字符串:
贪婪匹配【默认的】表达式: 1.*1     ===>  匹配到 1010000000001
非贪婪匹配 表达式 :     1.*?1     ===>  匹配到 101

10、分组: 用()表示        https://www.cnblogs.com/wancheng7/p/8906015.html

  说明: 就是以字符串为一个整体,而不是前面的字符类,主要是解决量词作用在一组字符串上而不是前面的一个字符类中

10.1、分组的 捕获(默认是捕获模式):这个是分组中一个比较实用的概念。         https://blog.csdn.net/lihefei_coder/article/details/53022253 

  如果不想捕获某个分组,在括号里加 ?:,如 (?:abc)

  实例: 分组捕获可以使用变量来代替分组的内容。参考 https://www.imooc.com/video/12534
  如:实现下面的转化 2015-12-25 => 12/25/2015 (前后顺序是不一样的);  url获取参数也用到分组的捕获
10.2、非捕获型 :(不希望捕获某些分组,在分组内加上?:就可以了)
10.3、分组的 前瞻:     参考 https://blog.csdn.net/lihefei_coder/article/details/53022253

  正向前瞻(?=表达式)表示后面要有什么;

  反向前瞻(?!=表达式)表示后面不能有什么

正向前瞻 exp(?=assert)
负向前瞻 exp(!assert)
var str = location.search.substr(1) // 截取到 参数开头的字符串
str.match(/(^|&)testid=([^&]*)(&|$)/)[2] // 直接获取到第二个分组([^&]*)的字符串,即我们需要的字符串   最后获取到的字符串需要考虑下需不需要编码
var str = location.hash.split("?")[1]   // 截取到 参数开头的字符串
str.match(/(^|&)testid=([^&]*)(&|$)/)[2]  // 这里和上面是一样的 ,  需要解码的话,使用 decodeURIComponent

分类:

技术点:

相关文章: