国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達(dá)式

Dean / 3719人閱讀

摘要:正則表達(dá)式產(chǎn)生回溯的地方貪婪量詞前面的匹配的是,后面的匹配的是惰性量詞惰

查看原文站點(diǎn),更多擴(kuò)展內(nèi)容及更佳閱讀體驗(yàn)!
查看原文:正則表達(dá)式
正則表達(dá)式
正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置。
字符匹配 兩種模糊匹配

正則表達(dá)式能實(shí)現(xiàn)模糊匹配

模糊匹配,有兩個(gè)方向上的模糊:橫向和縱向

橫向模糊匹配

橫向模糊指的是,一個(gè)正則可匹配的字符串的長(zhǎng)度不是固定的

實(shí)現(xiàn)方式是使用量詞。{m,n},表示連續(xù)出現(xiàn)最少m次,最多n

/ab{2,5}c/匹配:第一個(gè)字符是a,接下來是25個(gè)字符b,最后是c
var regex = /ab{2,5}c/g;
var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
console.log(string.match(regex));
//[ "abbc", "abbbc", "abbbbc", "abbbbbc" ]
縱向模糊匹配
縱向模糊,一個(gè)正則匹配的字符串,具體到某一位字符時(shí),它可以不是某個(gè)確定的字符,可以有多種可能

實(shí)現(xiàn)方式是使用字符組。[abc],表示該字符可以是abc中的任何一個(gè)。

var regex = /a[123]b/g;
var string = "a0b a1b a2b a3b a4b";
console.log(string.match(regex));
//[ "a1b", "a2b", "a3b" ]
字符組
雖然叫字符組(字符類),但只是匹配其中一個(gè)字符。[abc]表示匹配一個(gè)字符,它可以是abc
范圍表示法
字符組里的字符比較多,可以使用范圍表示法。

[123456abcdefGHIJKLM]可以寫成[1-6a-fG-M]。用連字符-來省略和簡(jiǎn)寫。

匹配a-z這三者中任意一個(gè)字符,可以寫成[-az][a-z]。要么放在開頭,要么放在結(jié)尾,要么轉(zhuǎn)義。

排除字符組

縱向模糊匹配某位字符不能是abc

[^abc]表示一個(gè)除abc之外的任意一個(gè)字符。字符組的第一位放^(脫字符),表示求反的概念。

常見的簡(jiǎn)寫形式

d就是[0-9]。表示一位數(shù)字。digit

D就是[^0-9]。表示除數(shù)字外的任意字符

w就是[0-9a-zA-Z]。表示數(shù)字、大小寫字母和下劃線。word

W就是[^0-9a-zA-Z]。非單詞字符

s就是[ v f]。表示空白符,包括空格、水平制表符、垂直制表符、換行符、回車符、換頁(yè)符。space

S就是[^ v f]。非空白符

.就是[^ u2028u2029]。通配符,表示所有任意字符。

匹配任意字符,可以使用[dD][wW][sS][^]中任意一個(gè)。
量詞
量詞也稱重復(fù)。{m,n}
簡(jiǎn)寫形式

{m,} 表示至少出現(xiàn)m

{m} 等價(jià)于{m,m},表示出現(xiàn)m

? 等價(jià)于{0,1},表示出現(xiàn)或不出現(xiàn)

+ 等價(jià)于{1,},表示出現(xiàn)至少一次。

* 等價(jià)于{0,},表示出現(xiàn)任意次,有可能不出現(xiàn)。

貪婪匹配和惰性匹配
var regex = /d{2,5}/g;
var string = "123 1234 12345 123456";
console.log(string.match(regex));
//[ "123", "1234", "12345", "12345" ]

貪婪匹配,就會(huì)盡可能多的匹配。

惰性匹配,就會(huì)盡可能少的匹配。

var regex = /d{2,5}?/g;
var string = "123 1234 12345 123456";
console.log(string.match(regex));
//[ "12", "12", "34", "12", "34", "12", "34", "56" ]

/d{2,5}?/g 表示25次都行,當(dāng)2個(gè)就夠的時(shí)候,不再往下匹配。

通過在量詞后面加?就能實(shí)現(xiàn)惰性匹配,所有的惰性匹配情形

{m,n}?

{m,}?

??

+?

*?

.* 是貪婪模式

.*?是惰性模式

多選分支

一個(gè)模式可以實(shí)現(xiàn)橫向和縱向模糊匹配。而多選分支可以支持多個(gè)子模式任選其一。

(p1|p2|p3)其中p1p2p3是子模式,用|(管道符)分隔,表示其中任何一個(gè)。

var regex = /good|nice/g;
var string = "good idea, nice try.";
console.log(string.match(regex));
//[ "good", "nice" ]
var regex = /good|goodbye/g;
var string = "goodbye";
console.log( string.match(regex) ); 
// => ["good"]
var regex = /goodbye|good/g;
var string = "goodbye";
console.log( string.match(regex) ); 
// => ["goodbye"]

以上得到的結(jié)果各不相同,分支結(jié)構(gòu)也是惰性的,即當(dāng)前面的匹配好了,后面的不再嘗試

案例分析 匹配16進(jìn)制顏色值

要求匹配

#ffbbad
#Fc01DF
#FFF
#ffE

分析

表示一個(gè)16進(jìn)制字符,可以用字符組[0-9a-fA-F]

其中字符可以出現(xiàn)36次,需要是用量詞和分支結(jié)構(gòu)

使用分支結(jié)構(gòu)時(shí),需要注意順序

var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
var string = "#ffbbad #Fc01DF #FFF #ffE";
console.log(string.match(regex));
//[ "#ffbbad", "#Fc01DF", "#FFF", "#ffE" ]
匹配時(shí)間

要求匹配

23:59
02:07

分析

4位數(shù)字,第一位數(shù)字可以是[0-2]

當(dāng)?shù)?b>1位是2時(shí),第2位可以是[0-3],其他情況第2位是[0-9]

3位數(shù)字是[0-5],第4位是[0-9]

var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/g;
要求匹配7:9,時(shí)分前面的0可以省略。
var regex = /^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9])$/g;
var string = "7:9";
console.log(regex.test(string));
//true
匹配日期

要求匹配 2017-06-10

分析

,四位數(shù)字即可[0-9]{4}

,共12個(gè)月,分兩種情況01、02、...10、11、12(0[1-9]|1[0-2])

,最大31天,可用(0[1-9]|[12][0-9]|3[01])

var regex = /^[0-9]{4}-(0[0-9]|1[0-2])-(0[0-9]|[12][0-9]|3[01])$/g;
console.log(regex.test("2017-10-20"));
//true
window操作系統(tǒng)文件路徑
F:studyjavascript
egex
egular expression.pdf
F:studyjavascript
egex
F:studyjavascript
F:

分析

整體模式是:盤符:文件夾文件夾文件夾

其中匹配F:,需要使用[a-zA-Z]:,其中盤符不區(qū)分大小寫,注意字符需要轉(zhuǎn)移

文件名或文件夾名,不能包含一些字符字符,此時(shí)需要排除字符組[^:*|"? /]來表示合法字符。不能為空名,至少有一個(gè)字符,也就是要使用量詞+

匹配文件夾,可用[^:*<>|"? /]+

另外文件夾,可以出現(xiàn)任意次。也就是([^:*<>|"? /]+)*。其中括號(hào)提供子表達(dá)式。

路徑的最后一部分可以是文件夾,沒有,因此需要添加([^:*<>|"? /]+)?

var regex = /^[a-zA-Z]:([^:*<>|"?
/]+)*([^:*<>|"?
/]+)?$/g;
匹配id
要求從
中提取出id="container"
var regex = /id=".*?"/;
var string = "
"; console.log(string.match(regex)[0]); //id="container"
位置匹配
在ES5中共有6個(gè)錨字符
^$B(?=p)(?!p)
$^

^(脫字符)匹配開頭,在多行匹配中匹配行開頭

$(美元符號(hào))匹配結(jié)尾,在多行匹配中匹配結(jié)尾

把字符串的開頭和結(jié)尾用#替換
var result = "hello".replace(/^|$/g, "#");
console.log(result);
//#hello#
多行匹配模式
var result = "I
love
javascript".replace(/^|$/gm, "#");
console.log(result);
//#I#
// #love#
// #javascript#
B
是單詞邊界,具體就是wW之間的位置,也包括wW之間的位置,也包括w$之間的位置

文件名是[JS] Lesson_01.mp4中的

var result = "[JS] Lesson_01.mp4".replace(//g, "#");
console.log(result);
//[#JS#] #Lesson_01#.#mp4#
(?=p)(?!p)

(?=p),其中p是一個(gè)子模式,即p前面的位置

(?=l),表示l字符前面的位置

var result = "hello".replace(/(?=l)/g, "#");
console.log(result);
//he#l#lo
(?!p)(?=p)的反向操作
var result = "hello".replace(/(?!l)/g, "#");
console.log(result);
//#h#ell#o#
分別是正向先行斷言和反向先行斷言,具體是(?<=p)(?

(?=p)就是p前面的那個(gè)位置

位置的特性
var result = /^^hello$$$/.test("hello");
console.log(result); 
// => true
案例 不匹配任何東西的正則
/.^/
數(shù)字的千位分隔符表示法

12345678,變成12,345,678

使用(?=d{3}$)
var result = "12345678".replace(/(?=d{3}$)/g, ",");
console.log(result);
//12345,678
逗號(hào)出現(xiàn)的位置,要求后面3個(gè)數(shù)字一組,也就是d{3}至少出現(xiàn)一次

可以使用量詞+

var result = "12345678".replace(/(?=(d{3})+$)/g, ",");
console.log(result);
//12,345,678
匹配其他案例

匹配位置不是開頭(?!^)

var string1 = "12345678";
var string2 = "123456789";
var reg = /(?!^)(?=(d{3})+$)/g;
var result1 = string1.replace(reg, ",");
console.log(result1);
//12,345,678
var result2 = string2.replace(reg, ",");
console.log(result2);
//123,456,789
驗(yàn)證密碼問題

密碼長(zhǎng)度6-12位,由數(shù)字、小寫字符和大寫字母組成,但必須至少包括2種字符。

簡(jiǎn)化

不考慮“但至少包括2種字符”這個(gè)條件
var reg = /^[0-9A-Za-z]{6,12}$/;

判斷是否含有某一種字符

如果要求必須包含數(shù)字,可以使用(?=.*[0-9])
var reg = /(?=.*[0-9])^[0-9A-Za-z]{6,12}$/;

同時(shí)包含具有兩種字符

同時(shí)包含數(shù)字和小寫字母,可以用(?=.*[0-9](?=.*[a-z]))
var reg = /(?=.*[0-9])(?=.*[a-z])^(0-9A-Za-z){6,12}$/;

同時(shí)包含數(shù)字和小寫字母

同時(shí)包含數(shù)字和大寫字母

同時(shí)包含小寫字母和大寫字母

同時(shí)包含數(shù)字、小寫字母和大寫字母

var reg = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/;
括號(hào)的作用

括號(hào)提供分組

引用某個(gè)分組,有兩種情形:在JS中引用,在正則表達(dá)式中應(yīng)用

分組和分支結(jié)構(gòu) 分組

/a+/匹配連續(xù)出現(xiàn)的a,要匹配連續(xù)出現(xiàn)的ab時(shí),需要使用/(ab)+/

括號(hào)提供分組功能,使量詞+作用于ab這個(gè)整體

var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log(string.match(regex));
//[ "abab", "ab", "ababab" ]
分支結(jié)構(gòu)

多選分支結(jié)構(gòu)(p1|p2)中括號(hào)的作用是提供了子表達(dá)式的所有可能

I love JavaScript
I love Regular Expression
var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") );
console.log( regex.test("I love Regular Expression") );
// => true
// => true
引用分組

括號(hào)的重要作用,可以進(jìn)行數(shù)據(jù)提取,以及更強(qiáng)大的替換操作

匹配日期yyyy-mm-dd

提取數(shù)據(jù)

提取出年、月、日
var regex = /(d{4})-(d{2})-(d{2})/;
var string = "2018-06-18";
console.log(string.match(regex));
//[ "2018-06-18", "2018", "06", "18", index: 0, input: "2018-06-18" ]
match返回的一個(gè)數(shù)組,第一個(gè)元素是整體匹配結(jié)果,然后是各個(gè)分組(括號(hào))匹配的內(nèi)容,然后是匹配下標(biāo),最后是輸入的文本。(正則是否有修飾符gmatch返回的數(shù)組格式是不一樣)

可以使用正則對(duì)象的exec方法

可以使用構(gòu)造函數(shù)的全局屬性$1$9來獲取
var regex = /(d{4})-(d{2})-(d{2})/;
var string = "2017-06-12";

regex.test(string); // 正則操作即可,例如
//regex.exec(string);
//string.match(regex);

console.log(RegExp.$1); // "2017"
console.log(RegExp.$2); // "06"
console.log(RegExp.$3); // "12"

替換

yyyy-mm-dd格式,替換成mm/dd/yyyy
var regex = /(d{4})-(d{2})-(d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, "$2/$3/$1");
console.log(result); 
// => "06/12/2017"
其中replace中第二個(gè)參數(shù)用$1$2$3指代相應(yīng)的分組。等價(jià)于var regex=/(d{4})-(d{2})-(d{2})/
反向引用

寫一個(gè)正則支持匹配以下三種格式:

2016-06-12
2016-06-12
2016.06.12

要求分割符前后一致,使用反向引用

var regex = /d{4}(-|/|.)d{2}1d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false

1,表示的引用之前的分組(-|/|.)。不管它匹配到什么(比如-),1都匹配那個(gè)同樣的具體某個(gè)字符

23分別指代第二個(gè)和第三個(gè)分組

括號(hào)嵌套

以左括號(hào)(開括號(hào))為準(zhǔn)
var regex = /^((d)(d(d)))1234$/;
var string = "1231231233";
console.log( regex.test(string) ); // true
console.log( RegExp.$1 ); // 123
console.log( RegExp.$2 ); // 1
console.log( RegExp.$3 ); // 23
console.log( RegExp.$4 ); // 3

正則匹配模式

第一個(gè)字符是數(shù)字,比如說1,

第二個(gè)字符是數(shù)字,比如說2,

第三個(gè)字符是數(shù)字,比如說3,

接下來的是1,是第一個(gè)分組內(nèi)容,那么看第一個(gè)開括號(hào)對(duì)應(yīng)的分組是什么,是123,

接下來的是2,找到第2個(gè)開括號(hào),對(duì)應(yīng)的分組,匹配的內(nèi)容是1,

接下來的是3,找到第3個(gè)開括號(hào),對(duì)應(yīng)的分組,匹配的內(nèi)容是23,

最后的是4,找到第3個(gè)開括號(hào),對(duì)應(yīng)的分組,匹配的內(nèi)容是3。

引用不存在的分組

反向引用,引用前面的分組,在正則里引用了不存在的分組,正則不會(huì)報(bào)錯(cuò),只是匹配反向引用的字符本身
非捕獲分組

前面出現(xiàn)的分組,都會(huì)捕獲它們匹配的數(shù)據(jù),以便后續(xù)引用,因此也稱它們是捕獲型分組

非捕獲分組?:p

var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log(string.match(regex));
//[ "abab", "ab", "ababab" ]
案例 字符串trim方法模擬
trim方法是去掉字符串的開頭和結(jié)尾的空白符

第一種,匹配到開頭和結(jié)尾的空白符,然后替換成空白符

function trim(str) {
    return str.replace(/^s+|s+$/g, "")
}

第二種,匹配整個(gè)字符串,然后用引用來提取出相應(yīng)的數(shù)據(jù)

function trim(str) {
    return str.replace(/^s*(.*?)s*$/g, "$1");
}
這里使用了惰性匹配*?,不然也會(huì)匹配最后一個(gè)空格之前的所有空格
將每個(gè)單詞的首字母轉(zhuǎn)換成大寫
function titleize(str) {
    return str.toLowerCase().replace(/(?:^|s)w/g, function (c) {
        return c.toUpperCase();
    })
}
console.log(titleize("my name is epeli"));
//My Name Is Epeli
思路是找到每個(gè)單詞的首字母,這里不適用非捕獲匹配也是可以的
駝峰化
function camelize(str) {
    return str.replace(/[-_s]+(.)?/g, function (match, c) {
        return c ? c.toUpperCase() : "";
    })
}
console.log(camelize("-moz-transform"));
//MozTransform
其中分組(.)表示首字母。單詞的界定是,前面的字符可以是多個(gè)連字符、下劃線以及空白符。

正則后面的的目的,是為了應(yīng)對(duì)str尾部的字符可能不是單詞字符。

中劃線化
駝峰化的逆過程
function dasherize(str) {
    return str.replace(/([A-Z])/g,"-$1").replace(/[-_s]+/g,"-").toLowerCase();
}
console.log(dasherize("MozTransform"));
//-moz-transform
html轉(zhuǎn)義和反轉(zhuǎn)義 匹配成對(duì)標(biāo)簽

要求匹配

regular expression

laoyao bye bye

不匹配

wrong!</p>
</pre>

<p>匹配一個(gè)開標(biāo)簽,使用正則<b><[^>]+></b>
</p>
<p>匹配一個(gè)閉標(biāo)簽,使用<b></[^>]+></b>
</p>

<pre>要求匹配成對(duì)標(biāo)簽,需要使用反向引用</pre>
<pre>var regex = /<([^>]+)>[dD]*</1>/;
var string1 = "<title>regular expression";
var string2 = "

laoyao bye bye

"; var string3 = "wrong!</p>"; console.log(regex.test(string1)); // true console.log(regex.test(string2)); // true console.log(regex.test(string3)); // false </pre> <p>其中開標(biāo)簽<b><[^>]+></b>改成<b><([^>]+)></b>,使用括號(hào)的目的是為了后面使用反向引用,而提供分組</p> <p>閉標(biāo)簽使用了反向引用<b></1></b> </p> <p> <b>[dD]</b>這個(gè)字符是數(shù)字或不是數(shù)字,也就是匹配任意字符</p> <b>正則表達(dá)式回溯法</b> <b>沒有回溯的匹配</b> <pre>當(dāng)目標(biāo)字符串是<b>abbbc</b>時(shí),就沒有所謂的“回溯”。</pre> <b>有回溯的匹配</b> <pre>如果目標(biāo)字符串是<b>abbc</b>,中間就有回溯</pre> <b>常見的回溯形式</b> <p>回溯法也稱試探法,基本思想:從問題的某一種狀態(tài)(初始狀態(tài))出發(fā),搜索從這種狀態(tài)出發(fā)所能達(dá)到的所有“狀態(tài)”,當(dāng)一條路走到“盡頭”的時(shí)候,再后退一步或若干步,從另一種可能狀態(tài)出發(fā),繼續(xù)搜索,直到所有的路徑(狀態(tài))都試探過。這種不斷前進(jìn)、不斷回溯尋找解的方法,稱作“回溯法”。</p> <p>本質(zhì)上就是深度優(yōu)先搜索算法。其中退到之前的某一步這個(gè)過程,成為“回溯”。</p> <p><strong>正則表達(dá)式產(chǎn)生回溯的地方</strong></p> <b>貪婪量詞</b> <pre>var string = "12345"; var regex = /(d{1,3})(d{1,3})/; console.log(string.match(regex)); //[ "12345", "123", "45", index: 0, input: "12345" ] </pre> <pre>前面的<b>d{1,3}</b>匹配的是<b>123</b>,后面的<b>d{1,3}</b>匹配的是<b>45</b> </pre> <b>惰性量詞</b> <pre>惰性量詞就是在貪婪量詞后面加個(gè)問好。表示盡可能少的匹配。</pre> <pre>var string = "12345"; var regex = /(d{1,3}?)(d{1,3})/; console.log( string.match(regex) ); // => ["1234", "1", "234", index: 0, input: "12345"] </pre> <p>其中<b>d{1,3}?</b>只匹配到一個(gè)字符<b>1</b>,而后面的<b>d{1,3}</b>匹配了<b>234</b> </p> <p>雖然惰性量詞不貪婪,但也會(huì)有回溯現(xiàn)象。</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000015333125?w=1760&h=432");</script></p> <b>分支結(jié)構(gòu)</b> <pre>分支也是惰性的,比如<b>/can|candy/</b>,去匹配字符串<b>candy</b>,得到的結(jié)果是<b>can</b>,因?yàn)榉种?huì)一個(gè)一個(gè)嘗試,如果前面的滿足,后面就不會(huì)再試驗(yàn)。<br>分支結(jié)構(gòu),可能前面的子模式會(huì)形成了局部匹配,如果接下來表達(dá)式整體不匹配,仍會(huì)繼續(xù)嘗試剩下的分支。</pre> <b>正則表達(dá)式的拆分</b> <b>結(jié)構(gòu)和操作符</b> <pre>在正則表達(dá)式中,操作符都體現(xiàn)在結(jié)構(gòu)中,即由特殊字符和匹配字符所代表的一個(gè)特殊整體。</pre> <p><strong>JS正則表達(dá)式中,都有哪些結(jié)構(gòu)?</strong></p> <p>字符字面量、字符組、量詞、錨字符、分組、選擇分支、反向引用</p> <p><strong>具體含義</strong></p> <p> <p><strong>字面量</strong>,匹配一個(gè)具體字符,包括不用轉(zhuǎn)義的和需要轉(zhuǎn)義的。</p> <p>比如<b>a</b>匹配字符<b>a</b>,<b> </b>匹配換行符,<b>.</b>匹配小數(shù)點(diǎn)</p> </p> <p> <p><strong>字符組</strong>,匹配一個(gè)字符,可以是多種可能之一,</p> <p>比如<b>[0-9]</b>,表示匹配一個(gè)數(shù)字,<b>d</b>是簡(jiǎn)寫形式。</p> <p>另外還有反義字符組,表示可以是除了特定字符之外任何一個(gè)字符,比如<b>[^0-9]</b>表示一個(gè)非數(shù)字字符,也有<b>D</b>的簡(jiǎn)寫形式</p> </p> <p> <p><strong>量詞</strong>,表示一個(gè)字符連續(xù)出現(xiàn),比如<b>a{1,3}</b>表示<b>a</b>字符連續(xù)出現(xiàn)3次。</p> <p>常見簡(jiǎn)寫形式,<b>a+</b>表示<b>a</b>字符連續(xù)出現(xiàn)至少一次</p> </p> <p> <p><strong>錨點(diǎn)</strong>,匹配一個(gè)位置,而不是字符。</p> <p>比如<b>^</b>匹配字符串的開頭,</p> <p>比如<b></b>匹配單詞邊界</p> <p>比如<b>(?=d)</b>表示數(shù)字前面的位置</p> </p> <p> <p><strong>分組</strong>,用括號(hào)表示一個(gè)整體,</p> <p>比如<b>(ab)+</b>表示<b>ab</b>兩個(gè)字符連續(xù)出現(xiàn)多次,也可以使用非捕獲分組<b>(?:ab)+</b> </p> </p> <p> <p><strong>分支</strong>,多個(gè)子表達(dá)式多選一</p> <p>比如<b>abc|bcd</b>表示式匹配<b>abc</b>或<b>bcd</b>字符子串</p> </p> <p> <strong>反向引用</strong>,比如<b>2</b>表示引用第<b>2</b>個(gè)分組</p> <p><strong>其中涉及到的操作符有</strong></p> <p>轉(zhuǎn)義符 <b></b> </p> <p>括號(hào)和方括號(hào) <b>(...)</b>、<b>(?:...)</b>、<b>(?=...)</b>、<b>(?!...)</b>、<b>[...]</b> </p> <p>量詞限定符 <b>{m}</b>、<b>{m,n}</b>、<b>{m,}</b>、<b>?</b>、<b>*</b>、<b>+</b> </p> <p>位置和序列 <b>^</b>、<b>$</b>、<b>元字符</b>、一般字符</p> <p>管道符 <b>|</b> </p> <p>操作符的優(yōu)先級(jí)從上至下,由高到低</p> <pre>/ab?(c|de*)+|fg/ </pre> <p>由于括號(hào)的存在,<b>(c|de*)</b>是一個(gè)整體結(jié)構(gòu)</p> <p>在<b>(c|de*)</b>中注意其中的量詞,因此<b>e</b>是一個(gè)整體結(jié)構(gòu)</p> <p>因?yàn)榉种ЫY(jié)構(gòu)<b>|</b>優(yōu)先級(jí)最低,因此<b>c</b>是一個(gè)整體,而<b>de*</b>是另一個(gè)整體</p> <p>同理,整個(gè)正則分成了<b>a</b>、<b>b?</b>、<b>(...)+</b>、<b>f</b>、<b>g</b>。而由于分支的原因,又可以分成<b>ab?(c|de*)+</b>和<b>fg</b>兩部分</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000015333126?w=1940&h=1176");</script></p> <b>注意要點(diǎn)</b> <p><strong>匹配字符串整體問題</strong></p> <p>要匹配整個(gè)字符串,在正則前后中加上錨字符<b>^</b>和<b>$</b> </p> <p><strong>量詞連綴問題</strong></p> <pre>每個(gè)字符為a、b、c任選其一 字符串的長(zhǎng)度是3的倍數(shù) </pre> <p><b>/([abc]{3})/</b></p> <p><strong>元字符轉(zhuǎn)義問題</strong></p> <p>元字符,就是正則中特殊含義的字符</p> <p> <p>所有結(jié)構(gòu)里,用到的元字符:</p> <p> <b>^</b>、<b>$</b>、<b>.</b>、<b>*</b>、<b>+</b>、<b>?</b>、<b>|</b>、<b>|</b>、<b>/</b>、<b>()</b>、<b>[]</b>、<b>{}</b>、<b>=</b>、<b>!</b>、<b>:</b>、<b>-</b>、<b>,</b> </p> </p> <p>當(dāng)匹配上面的字符本身時(shí),可以一律轉(zhuǎn)義:</p> <pre>var string = "^$.*+?|/[]{}=!:-,"; var regex = /^$.*+?|/[]{}=!:-,/; console.log(regex.test(string)); // => true </pre> <p>其中<b>string</b>中的<b></b>字符也要轉(zhuǎn)義</p> <p>另外在<b>string</b>中也可以把每個(gè)字符轉(zhuǎn)義,轉(zhuǎn)義后的結(jié)果仍然是自身</p> <p><strong>字符組中的元字符</strong></p> <pre>跟字符組相關(guān)的元字符有[]<b>`、</b>^<b>、</b>-<b>,需要在會(huì)引起歧義的地方進(jìn)行轉(zhuǎn)義。例如開頭的</b>^`必須轉(zhuǎn)義,不然會(huì)把整個(gè)字符組,看成反義字符組。</pre> <pre>var string = "^$.*+?|/[]{}=!:-,"; var regex = /[^$.*+?|/[]{}=!:-,]/g; console.log( string.match(regex) ); </pre> <b>案例分析</b> <p><strong>身份證</strong></p> <pre>/^(d{15}|d{17}[dxX])$/ </pre> <pre>因?yàn)?b>|</b>的優(yōu)先級(jí)最低,所以正則分成了兩部分<b>d{15}</b>和<b>d{17}[dxX]</b> </pre> <p> <b>d{15}</b>表示<b>15</b>位連續(xù)數(shù)字</p> <p> <b>d{17}[dxX]</b>表示<b>17</b>位連續(xù)數(shù)字,最后一位可以是數(shù)字或大小寫字母<b>x</b> </p> <p><strong>IPV4地址</strong></p> <pre>(0{0,2}d|0?d{2}|1d{2}|2[0-4]d|25[0-5])(0{0,2}d|0?d{2}|1d{2}|2[0-4]d|25[0-5]) </pre> <p><strong>它是一個(gè)多選結(jié)構(gòu),分成<b>5</b>部分</strong></p> <p> <b>0{0-2}d</b>,匹配一位數(shù),包括<b>0</b>補(bǔ)齊。比如<b>9</b>、<b>09</b>、<b>009</b> </p> <p> <b>0?d{2}</b>,匹配兩位數(shù),包括<b>0</b>補(bǔ)齊,也包括一位數(shù)</p> <p> <b>1d{2}</b>,匹配<b>100</b>到<b>199</b> </p> <p> <b>2[0-4]d</b>,匹配<b>200-249</b> </p> <p> <b>25[0-5]</b>,匹配<b>250-255</b> </p> <b>正則表達(dá)式編程</b> <b>四種操作</b> <b>驗(yàn)證</b> <p>驗(yàn)證時(shí)正則表達(dá)式最直接的應(yīng)用,比如表單驗(yàn)證</p> <pre>判斷一個(gè)字符串中是否有數(shù)字</pre> <p><strong>使用<b>search</b></strong></p> <pre>var regex = /d/; var string = "abc123"; console.log(!!~string.search(regex)); //true </pre> <p><strong>使用<b>test</b></strong></p> <pre>var regex = /d/; var string = "abc123"; console.log( regex.test(string) ); // => true </pre> <p><strong>使用<b>match</b></strong></p> <pre>var regex = /d/; var string = "abc123"; console.log( !!string.match(regex) ); // => true </pre> <p><strong>使用<b>exec</b></strong></p> <pre>var regex = /d/; var string = "abc123"; console.log( !!regex.exec(string) ); // => true </pre> <pre>其中,最常用的是<b>test</b> </pre> <b>切分</b> <p> <p>切分,就是把目標(biāo)字符串切成段,例如JS中的<b>split</b></p> <p>比如目標(biāo)字符串<b>html,css,javascript</b>,按逗號(hào)來切分</p> </p> <pre>var regex = /,/; var string = "html,css,javascript"; console.log(string.split(regex)); //[ "html", "css", "javascript" ]</pre> <p><strong>日期格式</strong></p> <pre>2018/06/20 2018.06.20 2018-06-20 </pre> <p>可以使用<b>split</b>切出年月日</p> <pre>var regex = /D/; console.log("2018/06/20".split(regex)); console.log("2018.06.20".split(regex)); console.log("2018-06-20".split(regex)); // [ "2018", "06", "20" ] // [ "2018", "06", "20" ] // [ "2018", "06", "20" ] </pre> <b>提取</b> <p>此時(shí)正則通常要使用分組引用(分組捕獲)功能</p> <p><strong><b>match</b></strong></p> <pre>var regex = /^(d{4})D(d{2})D(d{2})$/; var string = "2018-06-20"; console.log(string.match(regex)); //[ "2018-06-20", "2018", "06", "20", index: 0, input: "2018-06-20" ] </pre> <p><strong><b>exec</b></strong></p> <pre>var regex = /^(d{4})D(d{2})D(d{2})$/; var string = "2018-06-20"; console.log(regex.exec(string)); //[ "2018-06-20", "2018", "06", "20", index: 0, input: "2018-06-20" ] </pre> <p><strong><b>test</b></strong></p> <pre>var regex = /^(d{4})D(d{2})D(d{2})$/; var string = "2018-06-20"; regex.test(string); console.log(RegExp.$1, RegExp.$2, RegExp.$3); //2018 06 20 </pre> <p><strong><b>search</b></strong></p> <pre>var regex = /^(d{4})D(d{2})D(d{2})$/; var string = "2018-06-20"; string.search(regex); console.log(RegExp.$1, RegExp.$2, RegExp.$3); //2018 06 20 </pre> <p><strong><b>replace</b></strong></p> <pre>var regex = /^(d{4})D(d{2})D(d{2})$/; var string = "2018-06-20"; var date = []; string.replace(regex, function (match, year, month, day) { date.push(year, month, day); }); console.log(date); //[ "2018", "06", "20" ] </pre> <pre>其中最常用的是<b>match</b> </pre> <b>替換</b> <pre>把日期格式,從<b>yyyy-mm-dd</b>替換成<b>yyyy/mm/dd</b>:</pre> <pre>var string = "2018-06-20"; var today = new Date(string.replace(/-/g, "/")); console.log(today); //2018-06-19T16:00:00.000Z </pre> <pre>用于正則操作的方法,共有<b>6</b>個(gè),字符串實(shí)例<b>4</b>個(gè),正則實(shí)例<b>2</b>個(gè)</pre> <p><b>string#search</b></p> <p><b>string#split</b></p> <p><b>string#match</b></p> <p><b>string#replace</b></p> <p><b>RegExp#test</b></p> <p><b>RegExp#exec</b></p> <p><strong><b>search</b>和<b>match</b>的參數(shù)問題</strong></p> <p>字符串實(shí)例的<b>4</b>個(gè)方法參數(shù)都支持正則和字符串</p> <p>但<b>search</b>和<b>match</b>把字符串轉(zhuǎn)換為正則</p> <pre>var string = "2018.06.20"; console.log(string.search("."));//0 //需要修改成下列形式之一 console.log(string.search("."));//4 console.log(string.search(/./));//4 console.log(string.match(".")); //[ "2", index: 0, input: "2018.06.20" ] //需要修改成下列形式之一 console.log(string.match(".")); //[ ".", index: 4, input: "2018.06.20" ] console.log(string.match(/./)); //[ ".", index: 4, input: "2018.06.20" ] console.log(string.split(".")); //[ "2018", "06", "20" ] console.log(string.replace(".", "/")); //2018/06.20</pre> <p><strong><b>match</b>返回結(jié)果的格式問題</strong></p> <pre> <b>match</b>返回結(jié)果的格式,跟正則對(duì)象是否有修飾符<b>g</b>有關(guān)</pre> <pre>var string = "2018.06.20"; var regex1=/(d+)/; var regex2=/(d+)/g; console.log(string.match(regex1)); //[ "2018", "2018", index: 0, input: "2018.06.20" ] console.log(string.match(regex2)); //[ "2018", "06", "20" ] </pre> <p>沒有<b>g</b>,返回的是標(biāo)準(zhǔn)匹配格式,數(shù)組的第一個(gè)元素時(shí)整體匹配的內(nèi)容,接下來是分組捕獲的內(nèi)容,然后是整體匹配的第一個(gè)下標(biāo),最后的輸入的目標(biāo)字符串</p> <p>有<b>g</b>,返回的是所有匹配的內(nèi)容</p> <p>當(dāng)沒有匹配時(shí),不管有沒有<b>g</b>都返回<b>null</b> </p> <p><strong><b>exec</b>比<b>match</b>更強(qiáng)大</strong></p> <pre>當(dāng)正則沒有<b>g</b>時(shí),使用<b>match</b>返回的信息比較多。但是有<b>g</b>后,就沒有關(guān)鍵信息<b>index</b><br>而<b>exec</b>方法就能解決這個(gè)問題,它能接著上一次匹配后繼續(xù)匹配</pre> <pre>var string = "2018.06.20"; var regex = /(d+)/g; console.log(regex.exec(string)); //[ "2018", "2018", index: 0, input: "2018.06.20" ] console.log(regex.lastIndex);//4 console.log(regex.exec(string)); // [ "06", "06", index: 5, input: "2018.06.20" ] console.log(regex.lastIndex);//7 console.log(regex.exec(string)); //[ "20", "20", index: 8, input: "2018.06.20" ] console.log(regex.lastIndex);//10 console.log(regex.exec(string));//null console.log(regex.lastIndex);//0</pre> <p><strong><b>test</b>整體匹配時(shí)需要使用<b>^</b>和<b>$</b></strong></p> <pre> <b>test</b>是看目標(biāo)字符串中是否有子串匹配正則,即有部分匹配即可。</pre> <p>要整體匹配,正則前后需要添加開頭和結(jié)尾</p> <pre>console.log( /123/.test("a123b") ); // => true console.log( /^123$/.test("a123b") ); // => false console.log( /^123$/.test("123") ); // => true</pre> <p><strong><b>split</b>相關(guān)注意事項(xiàng)</strong></p> <p>第一,它可以有第二個(gè)參數(shù),表示結(jié)果數(shù)組的最大長(zhǎng)度</p> <pre>var string = "html,css,javascript"; console.log( string.split(/,/, 2) ); // =>["html", "css"]</pre> <p>第二,正則使用分組時(shí),結(jié)果數(shù)組中是包含分隔符的</p> <pre>var string = "html,css,javascript"; console.log( string.split(/(,)/) ); // =>["html", ",", "css", ",", "javascript"]</pre> <p><strong><b>replace</b>是很強(qiáng)大的</strong></p> <pre> <b>replace</b>有兩種使用形式,它的第二個(gè)參數(shù),可以是字符串,也可以是函數(shù)。</pre> <p>當(dāng)?shù)诙€(gè)參數(shù)是字符串時(shí),如下的字符有特殊的含義:</p> <p> <b>$1</b>,<b>$2,...,$99</b> 匹配第<b>1~99</b>個(gè)分組里捕獲的文本</p> <p> <b>$&</b> 匹配到的子串文本</p> <p> <b>$</b>` 匹配到的子串的左邊文本</p> <p> <b>$"</b> 匹配到的子串的右邊文本</p> <p> <b>$$</b> 美元符號(hào)</p> <p>例如,把"<b>2,3,5</b>",變成"<b>5=2+3</b>":</p> <pre>var result = "2,3,5".replace(/(d+),(d+),(d+)/, "$3=$1+$2"); console.log(result); // => "5=2+3" </pre> <p>當(dāng)?shù)诙€(gè)參數(shù)是函數(shù)時(shí),該回調(diào)函數(shù)的參數(shù)具體:</p> <pre>"1234 2345 3456".replace(/(d)d{2}(d)/g, function(match, $1, $2, index, input) { console.log([match, $1, $2, index, input]); }); // => ["1234", "1", "4", 0, "1234 2345 3456"] // => ["2345", "2", "5", 5, "1234 2345 3456"] // => ["3456", "3", "6", 10, "1234 2345 3456"] </pre> <p><strong>修飾符</strong></p> <p> <b>g</b> 全局匹配,即找到所有匹配的,單詞是<b>global</b> </p> <p> <b>i</b> 忽略字母大小寫,單詞<b>ingoreCase</b> </p> <p> <b>m</b> 多行匹配,只影響<b>^</b>和<b>$</b>,二者變成行的概念,即行開頭和行結(jié)尾。單詞是<b>multiline</b> </p> </div> <div id="jzfzt7v" class="mt-64 tags-seach" > <div id="vfx7hz7" class="tags-info"> <a style="width:120px;" title="云服務(wù)器" href="http://m.specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務(wù)器</a> <a style="width:120px;" title="GPU云服務(wù)器" href="http://m.specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務(wù)器</a> <a style="width:120px;" title="正則正則表達(dá)式" href="http://m.specialneedsforspecialkids.com/yun/tag/zhengzezhengzebiaodashi/">正則正則表達(dá)式</a> <a style="width:120px;" title="正則匹配正則表達(dá)式" href="http://m.specialneedsforspecialkids.com/yun/tag/zhengzepipeizhengzebiaodashi/">正則匹配正則表達(dá)式</a> <a style="width:120px;" title="-正則表達(dá)式" href="http://m.specialneedsforspecialkids.com/yun/tag/-zhengzebiaodashi/">-正則表達(dá)式</a> <a style="width:120px;" title="正則表達(dá)式?" href="http://m.specialneedsforspecialkids.com/yun/tag/zhengzebiaodashi?/">正則表達(dá)式?</a> </div> </div> <div id="jvzr7fr" class="entry-copyright mb-30"> <p class="mb-15"> 文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。</p> <p>轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95564.html</p> </div> <ul class="pre-next-page"> <li id="nt5z5pr" class="ellipsis"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/95563.html">上一篇:讓 IDEA 支持 直接執(zhí)行 TypeScript 的插件</a></li> <li id="7fxpht7" class="ellipsis"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/95565.html">下一篇:JS中幾種包含for的遍歷方式</a></li> </ul> </div> <div id="fnbj7pr" class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相關(guān)文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div id="rzp5zpt" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/92730.html"><b><em>正則</em><em>表<em>達(dá)式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語(yǔ)言里和所有的計(jì)算機(jī)平臺(tái)上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...</p> <div id="j7vnffr" class="com_white-left-info"> <div id="lrjjnzn" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-1119.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/11/small_000001119.jpg" alt=""><span id="vfxppff" class="layui-hide64">bang590</span></a> <time datetime="">2019-08-22 13:59</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="9j5jdpr" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/95028.html"><b>JS中的<em>正則</em><em>表<em>達(dá)式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對(duì)象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...</p> <div id="7lflzxx" class="com_white-left-info"> <div id="xhjdv7n" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-939.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/09/small_000000939.jpg" alt=""><span id="zldxtnn" class="layui-hide64">Soarkey</span></a> <time datetime="">2019-08-22 17:17</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="xjpt5jv" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/95967.html"><b>JavaScript<em>正則</em><em>表<em>達(dá)式</em></em>總結(jié)</b></a></h2> <p class="ellipsis2 good">摘要:正則表達(dá)式一直是里比較難以掌握的點(diǎn)。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達(dá)式的字面量語(yǔ)法,表示正則表達(dá)式的模式,為正則表達(dá)式的標(biāo)志。字面量形式的正則表達(dá)式一般使用較多,也推薦大家盡可能使用這種形式,簡(jiǎn)潔易讀,符合正常的使用習(xí)慣。 正則表達(dá)式一直是js里比較難以掌握的點(diǎn)。 看不懂,學(xué)不會(huì),記不住。 每次需要用到正則的時(shí)候,都需要再去查找資料。 今天花時(shí)間把正則的知識(shí)點(diǎn)總結(jié)下,希望...</p> <div id="zzttn5l" class="com_white-left-info"> <div id="fh55dh5" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-1094.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/10/small_000001094.jpg" alt=""><span id="pl7xffr" class="layui-hide64">big_cat</span></a> <time datetime="">2019-08-22 18:32</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="df55t5t" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/78274.html"><b><em>正則</em>與JS中的<em>正則</em></b></a></h2> <p class="ellipsis2 good">摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語(yǔ)言對(duì)于正則不同支持參考單行模式與多行模式通過設(shè)置正則表達(dá)式后的修飾符可開啟對(duì)應(yīng)的匹配模式單行模式和多行模式。 最近這段時(shí)間幫同學(xué)處理一些文檔, 涉及到一些結(jié)構(gòu)化文檔的工作大部分都得使用正則表達(dá)式, 之前對(duì)于正則的認(rèn)識(shí)大多來源于語(yǔ)言書上那幾頁(yè)的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個(gè)整理。因?yàn)閷?duì)JS了解多點(diǎn),所...</p> <div id="7n7vl55" class="com_white-left-info"> <div id="l75vn5z" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-564.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/05/small_000000564.jpg" alt=""><span id="rdxlrjx" class="layui-hide64">firim</span></a> <time datetime="">2019-08-19 17:11</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="x7hzrvt" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/84892.html"><b>JavaScript<em>正則</em><em>表<em>達(dá)式</em></em>的匹配模式</b></a></h2> <p class="ellipsis2 good">摘要:選擇分組和引用正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號(hào)的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...</p> <div id="prhxpp5" class="com_white-left-info"> <div id="drjpzpd" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-220.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/02/small_000000220.jpg" alt=""><span id="5t7n5h7" class="layui-hide64">wqj97</span></a> <time datetime="">2019-08-20 18:56</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="fdjldpd" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://m.specialneedsforspecialkids.com/yun/90260.html"><b><em>正則</em><em>表<em>達(dá)式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語(yǔ)法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...</p> <div id="v5ldtft" class="com_white-left-info"> <div id="zrxnddt" class="com_white-left-infol"> <a href="http://m.specialneedsforspecialkids.com/yun/u-1489.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/14/small_000001489.jpg" alt=""><span id="p7jnj7t" class="layui-hide64">yibinnn</span></a> <time datetime="">2019-08-21 17:57</time> <span><i class="fa fa-commenting"></i>評(píng)論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div id="zvzrxzp" class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>發(fā)表評(píng)論</span></h3> <div id="7px7d7l" class="xcp-publish-main flex_box_zd"> <div id="rrlrbdf" class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陸后可評(píng)論</a> </div> </div> </div> <div id="pdtvndh" class="site-box-content"> <div id="77bf7xh" class="site-content-title"> <h3 class="top-com-title mb-64"><span>0條評(píng)論</span></h3> </div> <div id="zvxpvtv" class="pages"></ul></div> </div> </div> <div id="z7t5jfr" class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div id="l7przvx" class=""> <div id="fhjzp7f" class="com_layuiright-box user-msgbox"> <a href="http://m.specialneedsforspecialkids.com/yun/u-1663.html"><img src="http://m.specialneedsforspecialkids.com/yun/data/avatar/000/00/16/small_000001663.jpg" alt=""></a> <h3><a href="http://m.specialneedsforspecialkids.com/yun/u-1663.html" rel="nofollow">Dean</a></h3> <h6>男<span>|</span>高級(jí)講師</h6> <div id="htxbr7v" class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(1663)" id="attenttouser_1663" class="grad follow-btn notfollow attention">我要關(guān)注</a> <a href="javascript:login()" title="發(fā)私信" >我要私信</a> </div> <div id="ll7ptfh" class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="http://m.specialneedsforspecialkids.com/yun/ut-1663.html" class="box_hxjz">閱讀更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/121952.html">Linux環(huán)境基礎(chǔ)開發(fā)工具使用</a></h3> <p>閱讀 3544<span>·</span>2021-10-09 09:41</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/121871.html">SpinServers:圣何塞服務(wù)器75折優(yōu)惠,亞洲優(yōu)化線路,10Gbps帶寬,月付$126起</a></h3> <p>閱讀 2751<span>·</span>2021-10-08 10:18</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/119805.html">聽說看了這份Java學(xué)習(xí)路線的同學(xué),畢業(yè)都拿到了大廠offer</a></h3> <p>閱讀 2187<span>·</span>2021-09-10 10:51</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/119761.html">拉繩位移傳感器的有關(guān)知識(shí)建議大家收藏</a></h3> <p>閱讀 2683<span>·</span>2021-09-10 10:50</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/119621.html">Chapter1 大數(shù)據(jù)概述</a></h3> <p>閱讀 777<span>·</span>2021-09-09 09:33</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/119322.html">老用戶購(gòu)買阿里云服務(wù)器首選優(yōu)惠活動(dòng):爆款特惠活動(dòng)</a></h3> <p>閱讀 3386<span>·</span>2021-09-06 15:14</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/114774.html">2019年前端面試題-01</a></h3> <p>閱讀 3020<span>·</span>2019-08-30 11:06</p></li> <li><h3 class="ellipsis"><a href="http://m.specialneedsforspecialkids.com/yun/112900.html">深入理解 CSS:字體度量、line-height 和 vertical-align</a></h3> <p>閱讀 3250<span>·</span>2019-08-29 14:04</p></li> </ul> </div> <!-- 文章詳情右側(cè)廣告--> <div id="lfjz7xh" class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活動(dòng)</span></h6> <div id="b77fldp" class="com_adbox"> <div id="xtl5xjj" class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="http://m.specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="http://m.specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務(wù)器"> </a> </div> <div> <a href="http://m.specialneedsforspecialkids.com/site/product/gpu.html" rel="nofollow"> <img src="http://m.specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務(wù)器"> </a> </div> </div> </div> </div> <!-- banner結(jié)束 --> <div id="rfvxptv" class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"http://m.specialneedsforspecialkids.com/yun/ad/getad/1.html", cache: false, success: function(text){ $(".adhtml").html(text); } }); }) </script> </div> </div> </div> </div> </div> </section> <!-- wap拉出按鈕 --> <div id="7fj5jf5" class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩層 --> <div id="jfbtlbd" class="site-mobile-shade"></div> <!--付費(fèi)閱讀 --> <div class="lphx777" id="payread"> <div id="xl75rb5" class="layui-form-item">閱讀需要支付1元查看</div> <div id="z7jbfdt" class="layui-form-item"><button class="btn-right">支付并查看</button></div> </div> <script> var prei=0; $(".site-seo-depict pre").each(function(){ var html=$(this).html().replace("<code>","").replace("</code>","").replace('<code class="javascript hljs" codemark="1">',''); $(this).attr('data-clipboard-text',html).attr("id","pre"+prei); $(this).html("").append("<code>"+html+"</code>"); prei++; }) $(".site-seo-depict img").each(function(){ if($(this).attr("src").indexOf('data:image/svg+xml')!= -1){ $(this).remove(); } }) $("LINK[href*='style-49037e4d27.css']").remove(); $("LINK[href*='markdown_views-d7a94ec6ab.css']").remove(); layui.use(['jquery', 'layer','code'], function(){ $("pre").attr("class","layui-code"); $("pre").attr("lay-title",""); $("pre").attr("lay-skin",""); layui.code(); $(".layui-code-h3 a").attr("class","copycode").html("復(fù)制代碼 ").attr("onclick","copycode(this)"); }); function copycode(target){ var id=$(target).parent().parent().attr("id"); var clipboard = new ClipboardJS("#"+id); clipboard.on('success', function(e) { e.clearSelection(); alert("復(fù)制成功") }); clipboard.on('error', function(e) { alert("復(fù)制失敗") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="http://m.specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="http://m.specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="http://m.specialneedsforspecialkids.com/yun/static/js/clipboard.js"></script> <script>hljs.initHighlightingOnLoad();</script> <script> function setcode(){ var _html=''; document.querySelectorAll('pre code').forEach((block) => { var _tmptext=$.trim($(block).text()); if(_tmptext!=''){ _html=_html+_tmptext; console.log(_html); } }); } </script> <script> function payread(){ layer.open({ type: 1, title:"付費(fèi)閱讀", shadeClose: true, content: $('#payread') }); } // 舉報(bào) function jupao_tip(){ layer.open({ type: 1, title:false, shadeClose: true, content: $('#jubao') }); } $(".getcommentlist").click(function(){ var _id=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); $("#articlecommentlist"+_id).toggleClass("hide"); var flag=$("#articlecommentlist"+_id).attr("dataflag"); if(flag==1){ flag=0; }else{ flag=1; //加載評(píng)論 loadarticlecommentlist(_id,_tid); } $("#articlecommentlist"+_id).attr("dataflag",flag); }) $(".add-comment-btn").click(function(){ var _id=$(this).attr("dataid"); $(".formcomment"+_id).toggleClass("hide"); }) $(".btn-sendartcomment").click(function(){ var _aid=$(this).attr("dataid"); var _tid=$(this).attr("datatid"); var _content=$.trim($(".commenttext"+_aid).val()); if(_content==''){ alert("評(píng)論內(nèi)容不能為空"); return false; } var touid=$("#btnsendcomment"+_aid).attr("touid"); if(touid==null){ touid=0; } addarticlecomment(_tid,_aid,_content,touid); }) $(".button_agree").click(function(){ var supportobj = $(this); var tid = $(this).attr("id"); $.ajax({ type: "GET", url:"http://m.specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "http://m.specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人贊"); } }); }else{ alert("您已經(jīng)贊過"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交數(shù)據(jù)的類型 POST GET type:"POST", //提交的網(wǎng)址 url:"http://m.specialneedsforspecialkids.com/yun/favorite/topicadd.html", //提交的數(shù)據(jù) data:{tid:_tid,rs:_rs}, //返回?cái)?shù)據(jù)的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在請(qǐng)求之前調(diào)用的函數(shù) beforeSend:function(){}, //成功返回之后調(diào)用的函數(shù) success:function(data){ var data=eval("("+data+")"); console.log(data) if(data.code==2000){ layer.msg(data.msg,function(){ if(data.rs==1){ //取消收藏 $(".layui-layer-tips").attr("data-tips","收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart-o"></i>'); } if(data.rs==0){ //收藏成功 $(".layui-layer-tips").attr("data-tips","已收藏文章"); $(".layui-layer-tips").html('<i class="fa fa-heart"></i>') } }) }else{ layer.msg(data.msg) } } , //調(diào)用執(zhí)行后調(diào)用的函數(shù) complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //調(diào)用出錯(cuò)執(zhí)行的函數(shù) error: function(){ //請(qǐng)求出錯(cuò)處理 postadopt=false; } }); } </script> <footer> <div id="v7n7nnn" class="layui-container"> <div id="hjz7b5p" class="flex_box_zd"> <div id="dfxl57r" class="left-footer"> <h6><a href="http://m.specialneedsforspecialkids.com/"><img src="http://m.specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優(yōu)刻得科技股份有限公司)"></a></h6> <p>UCloud (優(yōu)刻得科技股份有限公司)是中立、安全的云計(jì)算服務(wù)平臺(tái),堅(jiān)持中立,不涉足客戶業(yè)務(wù)領(lǐng)域。公司自主研發(fā)IaaS、PaaS、大數(shù)據(jù)流通平臺(tái)、AI服務(wù)平臺(tái)等一系列云計(jì)算產(chǎn)品,并深入了解互聯(lián)網(wǎng)、傳統(tǒng)企業(yè)在不同場(chǎng)景下的業(yè)務(wù)需求,提供公有云、混合云、私有云、專有云在內(nèi)的綜合性行業(yè)解決方案。</p> </div> <div id="777tljl" class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud與云服務(wù)</h6> <p><a href="http://m.specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p> <p><a >加入我們</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/solutions.html" >行業(yè)解決方案</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/pro-notice/">產(chǎn)品動(dòng)態(tài)</a></p> </li> <li> <h6>友情鏈接</h6> <p><a >GPU算力平臺(tái)</a></p> <p><a >UCloud私有云</a></p> <p><a >SurferCloud</a></p> <p><a >工廠仿真軟件</a></p> <p><a >Pinex</a></p> <p><a >AI繪畫</a></p> </li> <li> <h6>社區(qū)欄目</h6> <p><a href="http://m.specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p> <p><a href="http://m.specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p> </li> <li> <h6>常見問題</h6> <p><a href="http://m.specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/about/news/recent/" >新聞動(dòng)態(tài)</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/about/news/report/">媒體動(dòng)態(tài)</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p> <p><a href="http://m.specialneedsforspecialkids.com/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優(yōu)刻得"></span> <p>掃掃了解更多</p></div> </div> <div id="tfx5rff" class="copyright">Copyright ? 2012-2023 UCloud 優(yōu)刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網(wǎng)安備 31011002000058號(hào)</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號(hào)-3</a><i>|</i> <script type="text/javascript" src="https://gyfk12.kuaishang.cn/bs/ks.j?cI=197688&fI=125915" charset="utf-8"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?290c2650b305fc9fff0dbdcafe48b59d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-DZSMXQ3P9N"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-DZSMXQ3P9N'); </script> <script> (function(){ var el = document.createElement("script"); el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?99f50ea166557aed914eb4a66a7a70a4709cbb98a54ecb576877d99556fb4bfc3d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a"; el.id = "ttzz"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(el, s); })(window) </script></div> </div> </footer> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a> <div class="friend-links"> <a href="http://m.cp97744.com/">国产一区电影</a> </div> </div> </footer> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body><div id="ntnhv" class="pl_css_ganrao" style="display: none;"><label id="ntnhv"><strike id="ntnhv"><font id="ntnhv"><listing id="ntnhv"></listing></font></strike></label><thead id="ntnhv"></thead><listing id="ntnhv"><big id="ntnhv"><small id="ntnhv"><dfn id="ntnhv"></dfn></small></big></listing><meter id="ntnhv"></meter><font id="ntnhv"><ins id="ntnhv"></ins></font><dl id="ntnhv"><pre id="ntnhv"><track id="ntnhv"><em id="ntnhv"></em></track></pre></dl><pre id="ntnhv"></pre><nobr id="ntnhv"><small id="ntnhv"><meter id="ntnhv"><pre id="ntnhv"></pre></meter></small></nobr><tt id="ntnhv"><menuitem id="ntnhv"><span id="ntnhv"><i id="ntnhv"></i></span></menuitem></tt><var id="ntnhv"></var><mark id="ntnhv"><span id="ntnhv"><legend id="ntnhv"><dfn id="ntnhv"></dfn></legend></span></mark><th id="ntnhv"></th><mark id="ntnhv"><form id="ntnhv"></form></mark><b id="ntnhv"><meter id="ntnhv"><pre id="ntnhv"><p id="ntnhv"></p></pre></meter></b><track id="ntnhv"><em id="ntnhv"></em></track><th id="ntnhv"><b id="ntnhv"></b></th><pre id="ntnhv"><video id="ntnhv"><em id="ntnhv"><big id="ntnhv"></big></em></video></pre><menuitem id="ntnhv"></menuitem><style id="ntnhv"><nobr id="ntnhv"></nobr></style><acronym id="ntnhv"><style id="ntnhv"><nobr id="ntnhv"><small id="ntnhv"></small></nobr></style></acronym><sub id="ntnhv"><div id="ntnhv"></div></sub><u id="ntnhv"><mark id="ntnhv"></mark></u><form id="ntnhv"><legend id="ntnhv"><dfn id="ntnhv"><dfn id="ntnhv"></dfn></dfn></legend></form><ruby id="ntnhv"><thead id="ntnhv"><thead id="ntnhv"><label id="ntnhv"></label></thead></thead></ruby><strike id="ntnhv"><strong id="ntnhv"></strong></strike><label id="ntnhv"><strong id="ntnhv"></strong></label><listing id="ntnhv"></listing><progress id="ntnhv"><acronym id="ntnhv"><style id="ntnhv"><nobr id="ntnhv"></nobr></style></acronym></progress><legend id="ntnhv"><acronym id="ntnhv"><strong id="ntnhv"><rp id="ntnhv"></rp></strong></acronym></legend><th id="ntnhv"><thead id="ntnhv"></thead></th><strike id="ntnhv"><var id="ntnhv"><form id="ntnhv"><output id="ntnhv"></output></form></var></strike><var id="ntnhv"><form id="ntnhv"><ins id="ntnhv"><address id="ntnhv"></address></ins></form></var><small id="ntnhv"></small><dfn id="ntnhv"></dfn><big id="ntnhv"><ol id="ntnhv"><pre id="ntnhv"><track id="ntnhv"></track></pre></ol></big><pre id="ntnhv"></pre><strong id="ntnhv"></strong><dfn id="ntnhv"><menuitem id="ntnhv"><dl id="ntnhv"><i id="ntnhv"></i></dl></menuitem></dfn><acronym id="ntnhv"><style id="ntnhv"></style></acronym><pre id="ntnhv"><track id="ntnhv"></track></pre><dl id="ntnhv"><pre id="ntnhv"><track id="ntnhv"><tt id="ntnhv"></tt></track></pre></dl><style id="ntnhv"></style><thead id="ntnhv"><dfn id="ntnhv"><u id="ntnhv"><mark id="ntnhv"></mark></u></dfn></thead><strong id="ntnhv"></strong><sub id="ntnhv"></sub><p id="ntnhv"><nobr id="ntnhv"><small id="ntnhv"><output id="ntnhv"></output></small></nobr></p><i id="ntnhv"><track id="ntnhv"><tt id="ntnhv"><mark id="ntnhv"></mark></tt></track></i><mark id="ntnhv"><span id="ntnhv"><legend id="ntnhv"><dfn id="ntnhv"></dfn></legend></span></mark><acronym id="ntnhv"></acronym><em id="ntnhv"><div id="ntnhv"><dl id="ntnhv"><pre id="ntnhv"></pre></dl></div></em><font id="ntnhv"><meter id="ntnhv"><acronym id="ntnhv"><label id="ntnhv"></label></acronym></meter></font><strong id="ntnhv"></strong><u id="ntnhv"><ruby id="ntnhv"></ruby></u><meter id="ntnhv"><pre id="ntnhv"></pre></meter><strong id="ntnhv"><form id="ntnhv"><video id="ntnhv"><tt id="ntnhv"></tt></video></form></strong><ins id="ntnhv"><address id="ntnhv"><strike id="ntnhv"><var id="ntnhv"></var></strike></address></ins><mark id="ntnhv"></mark><legend id="ntnhv"></legend><style id="ntnhv"><th id="ntnhv"></th></style><label id="ntnhv"><strong id="ntnhv"></strong></label><form id="ntnhv"></form><font id="ntnhv"><meter id="ntnhv"></meter></font><b id="ntnhv"></b><p id="ntnhv"><strong id="ntnhv"><form id="ntnhv"><video id="ntnhv"></video></form></strong></p><ins id="ntnhv"><pre id="ntnhv"></pre></ins><span id="ntnhv"><legend id="ntnhv"></legend></span><tt id="ntnhv"><menuitem id="ntnhv"><dl id="ntnhv"><i id="ntnhv"></i></dl></menuitem></tt><output id="ntnhv"><sub id="ntnhv"><big id="ntnhv"><ol id="ntnhv"></ol></big></sub></output><pre id="ntnhv"><p id="ntnhv"></p></pre><dfn id="ntnhv"><mark id="ntnhv"><dl id="ntnhv"><i id="ntnhv"></i></dl></mark></dfn><form id="ntnhv"></form><sub id="ntnhv"></sub><pre id="ntnhv"></pre><div id="ntnhv"><ol id="ntnhv"></ol></div><sup id="ntnhv"></sup><b id="ntnhv"><meter id="ntnhv"></meter></b><progress id="ntnhv"><acronym id="ntnhv"><style id="ntnhv"><nobr id="ntnhv"></nobr></style></acronym></progress><strike id="ntnhv"></strike><th id="ntnhv"><b id="ntnhv"></b></th><mark id="ntnhv"></mark><menuitem id="ntnhv"><span id="ntnhv"></span></menuitem><strong id="ntnhv"><form id="ntnhv"></form></strong><mark id="ntnhv"><span id="ntnhv"></span></mark><track id="ntnhv"><tt id="ntnhv"></tt></track><legend id="ntnhv"></legend><dl id="ntnhv"></dl><meter id="ntnhv"></meter><pre id="ntnhv"><style id="ntnhv"></style></pre><em id="ntnhv"><big id="ntnhv"></big></em><sub id="ntnhv"></sub><sup id="ntnhv"><label id="ntnhv"><th id="ntnhv"><font id="ntnhv"></font></th></label></sup><small id="ntnhv"></small><dl id="ntnhv"><pre id="ntnhv"><track id="ntnhv"><tt id="ntnhv"></tt></track></pre></dl><legend id="ntnhv"><sup id="ntnhv"></sup></legend><track id="ntnhv"><tt id="ntnhv"></tt></track><ins id="ntnhv"><address id="ntnhv"><p id="ntnhv"><strong id="ntnhv"></strong></p></address></ins><em id="ntnhv"></em><mark id="ntnhv"></mark><label id="ntnhv"></label><label id="ntnhv"><th id="ntnhv"></th></label><rp id="ntnhv"><thead id="ntnhv"><legend id="ntnhv"><acronym id="ntnhv"></acronym></legend></thead></rp><nobr id="ntnhv"><form id="ntnhv"></form></nobr><font id="ntnhv"></font><strong id="ntnhv"><rp id="ntnhv"></rp></strong><strike id="ntnhv"></strike><legend id="ntnhv"></legend><div id="ntnhv"><ol id="ntnhv"></ol></div><thead id="ntnhv"><label id="ntnhv"><strong id="ntnhv"><rp id="ntnhv"></rp></strong></label></thead><label id="ntnhv"></label><var id="ntnhv"></var><mark id="ntnhv"><span id="ntnhv"><legend id="ntnhv"><label id="ntnhv"></label></legend></span></mark><dfn id="ntnhv"><u id="ntnhv"><ruby id="ntnhv"><font id="ntnhv"></font></ruby></u></dfn><legend id="ntnhv"><dfn id="ntnhv"><u id="ntnhv"><rp id="ntnhv"></rp></u></dfn></legend><optgroup id="ntnhv"><output id="ntnhv"></output></optgroup><i id="ntnhv"></i><pre id="ntnhv"><track id="ntnhv"><tt id="ntnhv"><big id="ntnhv"></big></tt></track></pre><nobr id="ntnhv"></nobr><mark id="ntnhv"><form id="ntnhv"></form></mark><div id="ntnhv"><ol id="ntnhv"></ol></div><var id="ntnhv"></var><label id="ntnhv"><strong id="ntnhv"></strong></label><video id="ntnhv"></video><label id="ntnhv"></label><font id="ntnhv"><legend id="ntnhv"></legend></font><mark id="ntnhv"><form id="ntnhv"></form></mark><em id="ntnhv"><big id="ntnhv"></big></em><em id="ntnhv"></em><meter id="ntnhv"><acronym id="ntnhv"><style id="ntnhv"><nobr id="ntnhv"></nobr></style></acronym></meter><menuitem id="ntnhv"><span id="ntnhv"><legend id="ntnhv"><dfn id="ntnhv"></dfn></legend></span></menuitem><var id="ntnhv"></var><nobr id="ntnhv"><small id="ntnhv"></small></nobr><sub id="ntnhv"><strike id="ntnhv"><strong id="ntnhv"><optgroup id="ntnhv"></optgroup></strong></strike></sub><optgroup id="ntnhv"><output id="ntnhv"><em id="ntnhv"><div id="ntnhv"></div></em></output></optgroup><rp id="ntnhv"><font id="ntnhv"><meter id="ntnhv"><acronym id="ntnhv"></acronym></meter></font></rp><div id="ntnhv"><strong id="ntnhv"></strong></div><var id="ntnhv"><form id="ntnhv"></form></var><sup id="ntnhv"><u id="ntnhv"><rp id="ntnhv"><thead id="ntnhv"></thead></rp></u></sup><font id="ntnhv"></font><optgroup id="ntnhv"><output id="ntnhv"><sub id="ntnhv"><div id="ntnhv"></div></sub></output></optgroup><meter id="ntnhv"></meter><big id="ntnhv"><dl id="ntnhv"></dl></big><small id="ntnhv"><meter id="ntnhv"><pre id="ntnhv"><strike id="ntnhv"></strike></pre></meter></small><font id="ntnhv"></font><legend id="ntnhv"><sup id="ntnhv"></sup></legend><strong id="ntnhv"></strong><label id="ntnhv"></label><label id="ntnhv"></label><thead id="ntnhv"></thead><strong id="ntnhv"><optgroup id="ntnhv"></optgroup></strong><dfn id="ntnhv"><menuitem id="ntnhv"><span id="ntnhv"><legend id="ntnhv"></legend></span></menuitem></dfn></div> <script src="http://m.specialneedsforspecialkids.com/yun/static/theme/ukd/js/common.js"></script> <<script type="text/javascript"> $(".site-seo-depict *,.site-content-answer-body *,.site-body-depict *").css("max-width","100%"); </script> </html>