概念一:按单字符匹配

正则里面的数据都是按照单个字符来进行匹配的,这个通过数值区间的例子最容易体现出来,比如,示例一:
我要匹配0-15的数值区间,用正则来写的话,便是[0-9]|1[0-5],这里,便是把0-9这种单字符的情况,和10-15这种多字符的情况拆分开了,使用分支|来区分开,表示要么是0-9,要么是10-15。
上面是两位数值的情况,现在延伸至1-65535,我个人的处理思想是从大到小,一块块分解:

  1. 1. 65530-65535 ==> 6553[0-5] 末位区间0-5
  2. 2. 65500-65529 ==> 655[0-2][0-9] 第四位区间0-2,末位区间0-9
  3. 3. 65000-65499 ==> 65[0-4][0-9]{2} 第三位区间0-4,后两位0-9
  4. 4. 60000-64999 ==> 6[0-4][0-9]{3} 第二位区间0-4,后三位0-9
  5. 5. 10000-59999 ==> [1-5][0-9]{4} 第一位区间1-5,后四位0-9
  6. 6. 1-9999 ==> [1-9][0-9]{0,3} 第一位只能是1-9,后三位可有可无

最后组合起来:
(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})
便得到1-65535匹配正则。
根据数据处理需求,可以在正则前后加上^$,以匹配整个数据串,或者前后加入\b,把它当做单词边界处理。没有限定字符的边界往往是js正则判断中常见的错误之一。

概念二:匹配优先和不匹配优先

匹配优先和不匹配优先从字面理解也是比较容易的,所谓匹配优先,就是,能匹配我就先匹配;不匹配优先就是,能不匹配我就先不匹配,这段匹配先跳过,先看看后面的匹配能不能通过。

概念三:贪婪模式与非贪婪模式

正则的贪婪模式和非贪婪模式是一个比较容易混淆的概念,不过,我们可以这么理解,一个人很贪婪,所以他会能拿多少拿多少,换过来,那就是贪婪模式下的正则表达式,能匹配多少就匹配多少,尽可能最多。而非贪婪模式,则是能不匹配就不匹配,尽可能最少。

概念四:环视(断言/零宽断言)

环视,在不同的地方又称之为零宽断言,简称断言。
用一句通俗的话解释:
环视,就是先从全局环顾一遍正则,(然后断定结果,)再做进一步匹配处理。
断言,就是先从全局环顾一遍正则,然后断定结果,再做进一步匹配处理。
两个虽然字面不一样,意思却是同一个,都是做全局观望,再做进一步处理。
环视的作用相当于对其所在位置加了一个附加条件,只有满足这个条件,环视子表达式才能匹配成功。
环视主要有以下4个用法:
(?<=exp) 匹配前面是exp的数据
(?<!exp) 匹配前面不是exp的数据
(?=exp) 匹配后面是exp的数据
(?!exp) 匹配后面不是exp的数据