String.prototype.search(regexp)
String.prototype.match(regexp)
String.prototype.replace(regexp|substr, newSubStr|function)
String.prototype.split([separator[, limit]]) // 字符串分割成字符串数组
RegExp.prototype.exec(str) // 成功返回数组,失败返回 null
RegExp.prototype.test(str) // 测试检索,匹配返回 true,失败返回 false
RegExp.prototype.toString()
// 转义字符
* . ? + $ ^ [ ] ( ) { } | \ /
\d === [0-9]
\D === [^0-9]
\s === [\f\n\r\t\u000B\u0020\u00A0\u2028\u2029] Unicode 空白符
\S === [^...]
\w === [0-9A-Z_a-z]
\b 字边界
? === {0,1} * === {0,} + === {1,}
\1 第一个捕获组
RegExp.$1-$9
RegExp.input ($_)
RegExp.lastMatch ($&)
RegExp.lastParen ($+)
RegExp.leftContext ($`)
RegExp.rightContext ($')
RegExp.prototype.source // 返回正则对象的模式文本字符串,不包括flags和斜杠
RegExp.prototype.flags // 返回一个字符串,由gimuy组成
RegExp.prototype.lastIndex // g 才生效
// 返回布尔值
RegExp.prototype.global // g
RegExp.prototype.ignoreCase // i
RegExp.prototype.multiline // m (影响 ^ 和 $ 的行为)
RegExp.prototype.unicode // u
RegExp.prototype.sticky // y
- 捕获组:(...) 作为子匹配返回。
- 非捕获组:
- (?=pattern) 会作为匹配校验,但不会出现在匹配结果字符串里面
- (?:pattern) 会作为匹配校验,并出现在匹配结果字符里面
var data = 'windows 98 is ok';
data.match(/windows (?=\d+)/); // ["windows "]
data.match(/windows (?:\d+)/); // ["windows 98"]
data.match(/windows (\d+)/); // ["windows 98", "98"]
var url = 'http://www.baidu.com:80/articles/js?wd=js&rsv_spt=1#fragment';
var parse_url = /^(?:([a-zA-Z]+:))?(\/{0,3})([\w.\-]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var results = parse_url.exec(url);
var names = ['href', 'protocol', 'slash', 'hostname', 'port', 'pathname', 'search', 'hash'];
var blanks = ' ';
for(let i =0, j = names.length; i < j; i++){
console.log(`${names[i]}: ${blanks.slice(names[i].length)} ${results[i]}`);
}
输出:
href: http://www.baidu.com:80/articles/js?wd=js&rsv_spt=1#fragment
protocol: http:
slash: //
hostname: www.baidu.com
port: 80
host: www.baidu.com:80
pathname: /articles/js
search: wd=js&rsv_spt=1
hash: fragment