新浦京81707con > 首页 > 正则表达式周二挑战赛,jQuery学习笔记

原标题:正则表达式周二挑战赛,jQuery学习笔记

浏览次数:71 时间:2019-07-31

regex-tuesday,每周一会出一同正则表明式的问题,本周的难点比较轻便,假若你答出来了,能够留言,要是答不出来.可以看看自家的答案和平解决释.上面内嵌了原标题页面.你要做的正是使用JavaScript正则字面量的写法/regex/i,来通过具备的测量试验用例.本周难点的具体需求是把用例中链接的马克down写法替换到侧面的HTML,一共有五个文本框须求填写,左边的写替换正则,侧边的写替换结果.约等于选取"xxoo".replace(/xx/,"oo").

来源:正则表明式括号的效劳
笔者:老姚(转发已得到小编授权)

jQuery中央银行使了大批量的正则表明式,那一个正则集聚了小编的小聪明,值得留神探讨.

 


url 分割

下边那些正则用来剖判url,使用它能够博得url中的各种部分(protocol,host,port)

rurl = /^([w. -] :)(?://([ ^/?#:]*)(?::(d )|)|)/

提到的知识点:

  • ^相称贰个输入或一行的开首, 比方/^a/匹配"an" 不合作"An",借使设置了Multiline属性,也匹配“\n”或“\r”之后的位置.并发在中括号时,相称未富含其日后的自由字符,譬如[^xyz]代表不匹配xyz

  • 分组分为捕获性分组和非捕获性分组,捕获分组会积累相配的开始和结果,以便下一次使用,非捕获性分组不存款和储蓄相称的剧情,以(?:...)表示

  • [w. -]protocol包括字母数字,. -这几类字符,並且是以字母起首,参照他事他说加以考察U宝马X3I . 都是特殊字符,为啥不转义呢?[w. -]古怪的是chrome上面测量检验[w. -]和[w. -]是等价的?‍

  • |选拔符,rurl中采用符的利用有一点点意料之外,/x|/的意思是相称x或许空字符串/(x)|()/.exec('a') -> ["",undefined, ""];

翻开答案

其一难点重要调查捕获分组和相称U奥迪Q7L的正则写法,懂不懂马克down的语法并不重大,只必要考查用例.

第一依照第一个用例,写出最初的正则,一共有多个捕获分组(卡其灰部分):

/[(. )]((. ))/    替换为     <a  >$1</a>       //匹配情况7/17

第8个用例误相称了,是因为使用了不法的磋商,大家须求一个匹配URubiconL的正则来替换. ,这些相称ULX570L的正则(黑色部分)就不做讲明了:

/[(. )]((http://[A-Za-z0-9-]*(?:.[A-Za-z-]*) /?))/    替换为     <a  >$1</a>       //匹配情况13/17

尾数第1个用例误相称了,是因为先导的l和前边的符号之间缺少空格,所以我们还供给加上三个合营空格的正则,要么是空格要么正是字符串的起来(白色部分),何况相当到的空格还要捕获到替换结果中:

/(s|^)[(. )]((http://[A-Za-z0-9-]*(?:.[A-Za-z-]*) /?))/    替换为    $1<a  >$2</a>       //匹配情况15/17

最后二个用例和下边类似,在字符串尾部也急需一个如此的限制:

/(s|^)[(. )]((http://[A-Za-z0-9-]*(?:.[A-Za-z-]*) /?))(s|$)/  替换为    $1<a  >$2</a>$4       //匹配情况16/17

尾数第贰个用例误相称了,相配标志的正则改一下,替换原本的. :

/(s|^)[([^[] )]((http://[A-Za-z0-9-]*(?:.[A-Za-z-]*) /?))(s|$)/  替换为     $1<a  >$2</a>$4       //匹配情况17/17

无论是哪门语言中都有括号。正则说明式也是一门语言,而括号的留存使那门语言更是强劲。对括号的使用是或不是百发百中,是衡量对正则的主宰程度的八个左边标准。括号的功用,其实三言两语就能够说清楚,括号提供了分组,便于大家引用它。引用有个别分组,会有三种情况:在JavaScript里援用它,在正则表明式里引用它。

跨域

众多稿子都在讲跨域,到底什么是跨域呢,看看ajax中是何等决断跨域的

if ( s.crossDomain == null ) {
    parts = rurl.exec( s.url.toLowerCase() ); //使用rurl切割用户请求的
    urls.crossDomain = !!( parts &&          //ajaxLocParts是当前页面的
         ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
         ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
         ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
    );
}
  • 钻探分化
  • 域名分歧
  • 端口分歧

正文内容虽相对简便易行,但本身也要写长点。

央浼加时间戳,禁止浏览器缓存

function addDateStamp( url ){
    var rts = /([?&])_=[ ^&]*/
    return rts.test( url) ?

    // If there is already a '_' parameter, set its value
    url.replace( rts, "$1_="   new Date().getTime() ) :  // Otherwise add one to the end
    url   ( /?/.test( url ) ? "&" : "?" )   "_="   new Date().getTime();
}

内容富含:

/ /

jquery工具函数$.param用于对象序化

譬喻说$.param({a : ' '}) -> a= , 为啥结果是a= 并非a=空格?

因为$.param方法内部使用encodeUENVISIONIComponent对字符实行编码,空格经过编码是 ,然后使用str.replace( / /g , " " )替换 .

怎么要将空格变为加号呢?

w3c中有关 Form content types中须要浏览器必须贯彻 application/x-www-form-urlencoded 和 multipart/form-data编码标准,二前面多个分明规定 Space characters are replaced by ` '

下边是一些网络参谋:

  • When to encode space to plus ( ) or ?
  • x-www-form-urlencoded
  • urlencoded算法

三个题外话,大家领略http response有三个contentType响应头,http request 也能够设置contentType,你知道吧?有何效益吧?

response header的contentType是报告浏览器,服务器回传的数据是如何品种,浏览器要怎么着处理。

request header 的contentType自然正是告诉服务器,浏览器传给你的时怎么数据,你应当怎么去解码管理等等。

jquery 中ajax也是会暗中认可设置request 的contentType header,

1.7.2本子以前的值是application/x-www-form-urlencoded,之后的本子加上了charset=UTF-8。

对此利用ajax传递汉语的情形,在动用1.7.2事先的版本会现出中文乱码的场所。管理的方案也很简短,正是覆盖原先的contentType,使用contentType=application/x-www-form-urlencoded;charset=UTF-8。

  1. 分组和分层组织

轮换函数参数难点

str.replace(ExpReg , replacementFn )

轮换函数的率先个参数代表的是正则的合营结果,之后的参数对应的是正则中的分组,_1 代表的就是第二个分组(a)的相配结果。

var regExp = /(a)(b)(c)/;
function replacement( _, _1, _2, _3 ){
    return _3   _2   _1 ;
}
console.log('abc'.replace(regExp,replacement));  // output: cba
  1. 抓获分组
  2. 反向引用
  3. 非捕获分组
  4. 连锁案例

idGetByProgram.replace( /'|/g , "$&" )

Sizzle函数中有一处代码,将多个特殊字符('和)增多转义字符,为啥要做那些工作吗?

$&的值指的是正则第4个参数相配到的结果

1. 分组和支行组织

那三头是括号最直觉的服从,也是最原始的效果。

删去首尾空格

sizzle中有贰个去除首尾空格的正则

rtrim = /^[x20trnf] |((?:^|[ ^\])(?:\.)*)[x20trnf] $/g

((?:|[])(?:.)*)东东是用来干什么的,是有何样异样情况必要思索吧?

上边包车型地铁,也能够去掉首尾空格,

/^s |s $/g

jquery本身也定义了一个删减空格的正则,名字也叫rtrim,可是八个正则写法差异为啥吧?

rtrim = /^[suFEFFxA0] |[suFEFFxA0] $/
1.1 分组

笔者们通晓/a /相配三翻五次出现的“a”,而要相称一连出现的“ab”时,须要动用/(ab) /。在这之中括号是提供分组效用,使量词“ ”成效于“ab”这一个全部,测量检验如下:

var regex = /(ab) /g;
var string = "ababa abbb ababab";
console.log( string.match(regex) ); // ["abab", "ab", "ababab"]

本文由新浦京81707con发布于首页,转载请注明出处:正则表达式周二挑战赛,jQuery学习笔记

关键词: 新浦京81707con js 虾编 正则表达式

上一篇:MySQL数据库语句INSERT和REPLACE介绍,Mysql使用inser

下一篇:没有了