正则表达式
正则表达式,一个描述字符模式的对象。javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式和匹配与替换功能。 -- from Javascript权威指南第六版
正则表达式的定义
js中的正则表达式用RegExp对象表示。
同其他的对象一样,可以有字面量与构造函数的方式来创建。
- 对正则表达式直接量,定义为在包含在一对斜杠(/)之间的字符
var regExp = /s$/;
- 构造函数表达方式
var regExp = new RegExp('s$');
选择、分组和引用
正则表达式的语法还包括指定选择项目、子表达式分组和引用前一子表达的特殊字符。
选择
` | ` 字符 用于分隔选择的字符,选择项的尝试匹配次序是从左向右,直到发现了匹配项目。如果左边的选择项匹配,就忽略右边的匹配项,即使产生更好的匹配。此处的逻辑于逻辑判断的` || `的短路操作类似。
分组
圆括号在正则表达式中的含义:
把单独的项组合成子表达式,以便可以像处理一个独立的单元那样用
|
,*
,+
,?
等来对单元内的项进行处理。就是一个普通结合的运算符。在完整的模式中定义子模式,即分组。在分组之后,可以利用''+数字完成对前面子表达式的引用,即所谓的反向引用。从1开始。(不从0开始的原因,个人觉得,正则表达式中的0项,一般是整体匹配的结果。)
Notice 在使用exec的过程之中,提取出来的数组的索引,从0以后即分组中的子模式的值,然而有些数据并不是我们需要的,只是在操作上简单,只有结构上的含义,不需要像其他的子分组的值取出,并适当提高处理性能,就是上面提到的圆括号的作用的第一点,不含第二点的情形,那么我们可以在圆括号内部使用(?:)来处理,就是匹配不处理。另附MDN 上,RegExp.prototype.exec 的结果解释:
Property/Index | Description |
[0] | The full string of characters matched |
[1], ...[n ] | The parenthesized substring matches, if any. The number of possible parenthesized substrings is unlimited. |
index | The 0-based index of the match in the string. |
input | The original string. |