例子
/**
* 删除http:和https:头,统一用https:
* @param {源url} sourceUrl
*/
exports.httpsUrl = function(sourceUrl) {
return sourceUrl && sourceUrl.replace(/^(?:https?:)?\/\//i, 'https://');
};
说明
1. ^ 代表启始位置
2. (?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
使用:["http://", 0, "http://baidu.com", callee: (...), Symbol(Symbol.iterator): ƒ]
不使用:["http://", "http:", 0, "http://baidu.com", callee: (...), Symbol(Symbol.iterator): ƒ]
3. http一定匹配 后面s?表明s 0个或者1个
4. ()? 括号后面 ? 代表前面的()内容 0个或者1个
5. 使用 \/\/ 转义特殊字符//
6. 最后的 /i 忽略大小写匹配
创建方式
1、实例创建
var reg = new RegExp('abc');
var reg = new RegExp('abc', 'img');
2、字面量
var reg=/abc/;
var reg=/abc/img;
说明
pattern:正则表达式
flags:标识(修饰符)
标识主要包括:
1. i 忽略大小写匹配
2. m 多行匹配,即在到达一行文本末尾时还会继续寻常下一行中是否与正则匹配的项
3. g 全局匹配 模式应用于所有字符串,而非在找到第一个匹配项时停止
区别
- 实例创建方式可以进行字符串拼接,字面量不行
var regParam = 'cm';
var reg1 = new RegExp(regParam+'1');
var reg2 = /regParam/;
console.log(reg1); // /cm1/
console.log(reg2); // /regParam/
- 实例创建需要转义特殊字符, 字面量不需要
var reg1 = new RegExp('\d'); // /d/
var reg2 = new RegExp('\\d') // /\d/
var reg3 = /\d/; // /\d/
元字符
1、特殊含义元字符
符号 | 说明 |
---|---|
\d | 0-9之间的任意一个数字 \d只占一个位置 |
\w | 数字、字母 、下划线 0-9 a-z A-Z _ |
\s | 空格或者空白等 |
\D | 除了\d |
\W | 除了\w |
\S | 除了\s |
. | 除了\n之外的任意一个字符 |
\ | 转义字符 |
| | 或者 |
() | 分组 |
\n | 匹配换行符 |
\b | 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数 |
^ | 限定开始位置 => 本身不占位置 => [ ]中^代表除了 |
$ | 限定结束位置 => 本身不占位置 |
[a-z] | 任意字母 [ ]中的表示任意一个都可以 例如[ab12] 匹配到a、b、1、2其中一个都行 |
[^a-z] | 非字母 [ ]中^代表除了 |
[abc] | abc三个字母中的任何一个 [^abc]除了这三个字母中的任何一个字符 |
2、特殊字符,匹配该字符都要使用添加 "\"
字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r' |
* | 0或多次 |
+ | 1或多次 |
? | 0次或1次,或指明一个非贪婪限定符 |
. | 除换行符 '\n' 之外的任意一个字符 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合 |
{ | 标记限定符表达式的开始 |
[ | 标记一个中括号表达式的开始 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用 |
| | 指明两项之间的一个选择 |
3、限定符 - 代表次数的量词元字符
字符 | 描述 | 例子 |
---|---|---|
* | 0或多次,等价于{0,} | 'ab*' 能匹配 "a" 和 "abb" |
+ | 1或多次,等价于 {1,} | 'ab+' 能匹配 "ab" 和 "abb",不能匹配 "a" |
? | 0次或1次,等价于 {0,1} | 'ab(cd)?' 可以匹配 "ab" 、 "abcd" 中的 "abcd" 、 "adxx" 中的 "ab" |
{n} | 正好n次 | 'o{2}' 不能匹配 "aob" 中的 'o',但是能匹配 "food" 中的两个 o |
{n,} | n到多次 | 'o{2,}' 不能匹配 "aob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 |
{n,m} | n次到m次 | 'o{1,3}' 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。逗号和两个数之间不能有空格。 |
零宽断言
这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用
字符 | 描述 | 例子 |
---|---|---|
(?:exp) | 匹配exp但不获取匹配结果(非获取匹配,不进行存储供以后使用)。使用 "或" 字符 ( | ) 来组合一个模式的各个部分是很有用 | "window(?:95|98) "就是一个比 "window95|window98" 更简略的表达式。 |
(?=exp) | 字符出现位置的右边须匹配exp表达式 | "Windows(?=95|98)"能匹配"Windows98"中的"Windows",但不能匹配"Windows2000"中的"Windows" |
(?!exp) | 字符出现位置的右边不能是exp表达式 | "Windows(?!95|98)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows98"中的"Windows" |
(?<=exp) | 字符出现位置的左边是exp表达式 | (?<=95|98)Windows"能匹配"98Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。 |
(?<!exp) | 字符出现位置的左边不能是exp表达式 | (?<=95|98)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"98Windows"中的"Windows"。 |
网友评论