JS 正则笔记

版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/81945835

JS正则笔记,因为正则在各种环境下的差异,所以会分开写。
替换 http://www.baidu.com 为 http://666.baidu.com

//不带协议,替换完成后再拼接。结果 https://jerryjin.baidu.com/
location.protocol + '//' +location.href.replace(/^.+?(?=\.)/, 'jerryjin');

//带协议部分,直接匹配出要替换的内容。结果 https://jerryjin.baidu.com/
location.href.match(/^.+\//)[0].replace(/(?<=\/\/).+?(?=\.)/, 'jerryjin');

/*
知识点1 非贪婪模式(惰性模式) "?"
.+? 开始匹配第一个满足的部分,因为我们要替换的只是 www 如果不用惰性模式,则会一直匹配到最后 www.baidu 
结果就变成了:https://jerryjin.com/

知识点2 正向预查 "?="
其实就是检测右则是否满足此条件,仅此而已。(只匹配不提取)
上面的例子中加上"(?=\.)"匹配出的结果就是 www 不加配出的结果就是 www. (仅此而已,自己玩玩就明白了)

知识点3 正向预查 "?<="
不多解释,上面是检测右边。这个就是检测左边了。说多了反而让人糊涂。
*/

最后可能有的童鞋还是习惯正规点的 官方文档

?

匹配前面一个表达式0次或者1次。等价于 {0,1}。
例如,/e?le?/ 匹配 “angel” 中的 ‘el’,和 “angle” 中的 ‘le’ 以及”oslo’ 中的’l’。
如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。
例如,对 “123abc” 应用 /\d+/ 将会返回 “123”,如果使用 /\d+?/,那么就只会匹配到 “1”。
还可以运用于先行断言,如本表的 x(?=y) 和 x(?!y) 条目中所述。
(?:x)
匹配 ‘x’ 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。

x(?=y)

匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。
例如,/Jack(?=Sprat)/会匹配到’Jack’仅仅当它后面跟着’Sprat’。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着’Sprat’或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

x(?!y)

匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。
例如,/\d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!.)/.exec(“3.141”)匹配‘141’但是不是‘3.141’

猜你喜欢

转载自blog.csdn.net/jx520/article/details/81945835