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

資訊專欄INFORMATION COLUMN

正則表達式

Dean / 3708人閱讀

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

查看原文站點,更多擴展內容及更佳閱讀體驗!
查看原文:正則表達式
正則表達式
正則表達式是匹配模式,要么匹配字符,要么匹配位置。
字符匹配 兩種模糊匹配

正則表達式能實現模糊匹配

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

橫向模糊匹配

橫向模糊指的是,一個正則可匹配的字符串的長度不是固定的

實現方式是使用量詞。{m,n},表示連續出現最少m次,最多n

/ab{2,5}c/匹配:第一個字符是a,接下來是25個字符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" ]
縱向模糊匹配
縱向模糊,一個正則匹配的字符串,具體到某一位字符時,它可以不是某個確定的字符,可以有多種可能

實現方式是使用字符組。[abc],表示該字符可以是abc中的任何一個。

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

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

匹配a-z這三者中任意一個字符,可以寫成[-az][a-z]。要么放在開頭,要么放在結尾,要么轉義。

排除字符組

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

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

常見的簡寫形式

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

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

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

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

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

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

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

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

{m,} 表示至少出現m

{m} 等價于{m,m},表示出現m

? 等價于{0,1},表示出現或不出現

+ 等價于{1,},表示出現至少一次。

* 等價于{0,},表示出現任意次,有可能不出現。

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

貪婪匹配,就會盡可能多的匹配。

惰性匹配,就會盡可能少的匹配。

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次都行,當2個就夠的時候,不再往下匹配。

通過在量詞后面加?就能實現惰性匹配,所有的惰性匹配情形

{m,n}?

{m,}?

??

+?

*?

.* 是貪婪模式

.*?是惰性模式

多選分支

一個模式可以實現橫向和縱向模糊匹配。而多選分支可以支持多個子模式任選其一。

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

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"]

以上得到的結果各不相同,分支結構也是惰性的,即當前面的匹配好了,后面的不再嘗試

案例分析 匹配16進制顏色值

要求匹配

#ffbbad
#Fc01DF
#FFF
#ffE

分析

表示一個16進制字符,可以用字符組[0-9a-fA-F]

其中字符可以出現36次,需要是用量詞和分支結構

使用分支結構時,需要注意順序

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" ]
匹配時間

要求匹配

23:59
02:07

分析

4位數字,第一位數字可以是[0-2]

當第1位是2時,第2位可以是[0-3],其他情況第2位是[0-9]

3位數字是[0-5],第4位是[0-9]

var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/g;
要求匹配7:9,時分前面的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

分析

,四位數字即可[0-9]{4}

,共12個月,分兩種情況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操作系統文件路徑
F:studyjavascript
egex
egular expression.pdf
F:studyjavascript
egex
F:studyjavascript
F:

分析

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

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

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

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

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

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

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

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

$(美元符號)匹配結尾,在多行匹配中匹配結尾

把字符串的開頭和結尾用#替換
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是一個子模式,即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前面的那個位置

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

12345678,變成12,345,678

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

可以使用量詞+

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
驗證密碼問題

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

簡化

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

判斷是否含有某一種字符

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

同時包含具有兩種字符

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

同時包含數字和小寫字母

同時包含數字和大寫字母

同時包含小寫字母和大寫字母

同時包含數字、小寫字母和大寫字母

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

括號提供分組

引用某個分組,有兩種情形:在JS中引用,在正則表達式中應用

分組和分支結構 分組

/a+/匹配連續出現的a,要匹配連續出現的ab時,需要使用/(ab)+/

括號提供分組功能,使量詞+作用于ab這個整體

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

多選分支結構(p1|p2)中括號的作用是提供了子表達式的所有可能

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
引用分組

括號的重要作用,可以進行數據提取,以及更強大的替換操作

匹配日期yyyy-mm-dd

提取數據

提取出年、月、日
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返回的一個數組,第一個元素是整體匹配結果,然后是各個分組(括號)匹配的內容,然后是匹配下標,最后是輸入的文本。(正則是否有修飾符gmatch返回的數組格式是不一樣)

可以使用正則對象的exec方法

可以使用構造函數的全局屬性$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中第二個參數用$1$2$3指代相應的分組。等價于var regex=/(d{4})-(d{2})-(d{2})/
反向引用

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

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都匹配那個同樣的具體某個字符

23分別指代第二個和第三個分組

括號嵌套

以左括號(開括號)為準
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

正則匹配模式

第一個字符是數字,比如說1,

第二個字符是數字,比如說2,

第三個字符是數字,比如說3,

接下來的是1,是第一個分組內容,那么看第一個開括號對應的分組是什么,是123,

接下來的是2,找到第2個開括號,對應的分組,匹配的內容是1,

接下來的是3,找到第3個開括號,對應的分組,匹配的內容是23,

最后的是4,找到第3個開括號,對應的分組,匹配的內容是3。

引用不存在的分組

反向引用,引用前面的分組,在正則里引用了不存在的分組,正則不會報錯,只是匹配反向引用的字符本身
非捕獲分組

前面出現的分組,都會捕獲它們匹配的數據,以便后續引用,因此也稱它們是捕獲型分組

非捕獲分組?:p

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

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

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

第二種,匹配整個字符串,然后用引用來提取出相應的數據

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

正則后面的的目的,是為了應對str尾部的字符可能不是單詞字符。

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

要求匹配

regular expression

laoyao bye bye

不匹配

wrong!</p>
</pre>

<p>匹配一個開標簽,使用正則<b><[^>]+></b>
</p>
<p>匹配一個閉標簽,使用<b></[^>]+></b>
</p>

<pre>要求匹配成對標簽,需要使用反向引用</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>其中開標簽<b><[^>]+></b>改成<b><([^>]+)></b>,使用括號的目的是為了后面使用反向引用,而提供分組</p> <p>閉標簽使用了反向引用<b></1></b> </p> <p> <b>[dD]</b>這個字符是數字或不是數字,也就是匹配任意字符</p> <b>正則表達式回溯法</b> <b>沒有回溯的匹配</b> <pre>當目標字符串是<b>abbbc</b>時,就沒有所謂的“回溯”。</pre> <b>有回溯的匹配</b> <pre>如果目標字符串是<b>abbc</b>,中間就有回溯</pre> <b>常見的回溯形式</b> <p>回溯法也稱試探法,基本思想:從問題的某一種狀態(初始狀態)出發,搜索從這種狀態出發所能達到的所有“狀態”,當一條路走到“盡頭”的時候,再后退一步或若干步,從另一種可能狀態出發,繼續搜索,直到所有的路徑(狀態)都試探過。這種不斷前進、不斷回溯尋找解的方法,稱作“回溯法”。</p> <p>本質上就是深度優先搜索算法。其中退到之前的某一步這個過程,成為“回溯”。</p> <p><strong>正則表達式產生回溯的地方</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>惰性量詞就是在貪婪量詞后面加個問好。表示盡可能少的匹配。</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>只匹配到一個字符<b>1</b>,而后面的<b>d{1,3}</b>匹配了<b>234</b> </p> <p>雖然惰性量詞不貪婪,但也會有回溯現象。</p> <p><script type="text/javascript">showImg("https://segmentfault.com/img/remote/1460000015333125?w=1760&h=432");</script></p> <b>分支結構</b> <pre>分支也是惰性的,比如<b>/can|candy/</b>,去匹配字符串<b>candy</b>,得到的結果是<b>can</b>,因為分支會一個一個嘗試,如果前面的滿足,后面就不會再試驗。<br>分支結構,可能前面的子模式會形成了局部匹配,如果接下來表達式整體不匹配,仍會繼續嘗試剩下的分支。</pre> <b>正則表達式的拆分</b> <b>結構和操作符</b> <pre>在正則表達式中,操作符都體現在結構中,即由特殊字符和匹配字符所代表的一個特殊整體。</pre> <p><strong>JS正則表達式中,都有哪些結構?</strong></p> <p>字符字面量、字符組、量詞、錨字符、分組、選擇分支、反向引用</p> <p><strong>具體含義</strong></p> <p> <p><strong>字面量</strong>,匹配一個具體字符,包括不用轉義的和需要轉義的。</p> <p>比如<b>a</b>匹配字符<b>a</b>,<b> </b>匹配換行符,<b>.</b>匹配小數點</p> </p> <p> <p><strong>字符組</strong>,匹配一個字符,可以是多種可能之一,</p> <p>比如<b>[0-9]</b>,表示匹配一個數字,<b>d</b>是簡寫形式。</p> <p>另外還有反義字符組,表示可以是除了特定字符之外任何一個字符,比如<b>[^0-9]</b>表示一個非數字字符,也有<b>D</b>的簡寫形式</p> </p> <p> <p><strong>量詞</strong>,表示一個字符連續出現,比如<b>a{1,3}</b>表示<b>a</b>字符連續出現3次。</p> <p>常見簡寫形式,<b>a+</b>表示<b>a</b>字符連續出現至少一次</p> </p> <p> <p><strong>錨點</strong>,匹配一個位置,而不是字符。</p> <p>比如<b>^</b>匹配字符串的開頭,</p> <p>比如<b></b>匹配單詞邊界</p> <p>比如<b>(?=d)</b>表示數字前面的位置</p> </p> <p> <p><strong>分組</strong>,用括號表示一個整體,</p> <p>比如<b>(ab)+</b>表示<b>ab</b>兩個字符連續出現多次,也可以使用非捕獲分組<b>(?:ab)+</b> </p> </p> <p> <p><strong>分支</strong>,多個子表達式多選一</p> <p>比如<b>abc|bcd</b>表示式匹配<b>abc</b>或<b>bcd</b>字符子串</p> </p> <p> <strong>反向引用</strong>,比如<b>2</b>表示引用第<b>2</b>個分組</p> <p><strong>其中涉及到的操作符有</strong></p> <p>轉義符 <b></b> </p> <p>括號和方括號 <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>操作符的優先級從上至下,由高到低</p> <pre>/ab?(c|de*)+|fg/ </pre> <p>由于括號的存在,<b>(c|de*)</b>是一個整體結構</p> <p>在<b>(c|de*)</b>中注意其中的量詞,因此<b>e</b>是一個整體結構</p> <p>因為分支結構<b>|</b>優先級最低,因此<b>c</b>是一個整體,而<b>de*</b>是另一個整體</p> <p>同理,整個正則分成了<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>注意要點</b> <p><strong>匹配字符串整體問題</strong></p> <p>要匹配整個字符串,在正則前后中加上錨字符<b>^</b>和<b>$</b> </p> <p><strong>量詞連綴問題</strong></p> <pre>每個字符為a、b、c任選其一 字符串的長度是3的倍數 </pre> <p><b>/([abc]{3})/</b></p> <p><strong>元字符轉義問題</strong></p> <p>元字符,就是正則中特殊含義的字符</p> <p> <p>所有結構里,用到的元字符:</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>當匹配上面的字符本身時,可以一律轉義:</p> <pre>var string = "^$.*+?|/[]{}=!:-,"; var regex = /^$.*+?|/[]{}=!:-,/; console.log(regex.test(string)); // => true </pre> <p>其中<b>string</b>中的<b></b>字符也要轉義</p> <p>另外在<b>string</b>中也可以把每個字符轉義,轉義后的結果仍然是自身</p> <p><strong>字符組中的元字符</strong></p> <pre>跟字符組相關的元字符有[]<b>`、</b>^<b>、</b>-<b>,需要在會引起歧義的地方進行轉義。例如開頭的</b>^`必須轉義,不然會把整個字符組,看成反義字符組。</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>因為<b>|</b>的優先級最低,所以正則分成了兩部分<b>d{15}</b>和<b>d{17}[dxX]</b> </pre> <p> <b>d{15}</b>表示<b>15</b>位連續數字</p> <p> <b>d{17}[dxX]</b>表示<b>17</b>位連續數字,最后一位可以是數字或大小寫字母<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>它是一個多選結構,分成<b>5</b>部分</strong></p> <p> <b>0{0-2}d</b>,匹配一位數,包括<b>0</b>補齊。比如<b>9</b>、<b>09</b>、<b>009</b> </p> <p> <b>0?d{2}</b>,匹配兩位數,包括<b>0</b>補齊,也包括一位數</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>正則表達式編程</b> <b>四種操作</b> <b>驗證</b> <p>驗證時正則表達式最直接的應用,比如表單驗證</p> <pre>判斷一個字符串中是否有數字</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>切分,就是把目標字符串切成段,例如JS中的<b>split</b></p> <p>比如目標字符串<b>html,css,javascript</b>,按逗號來切分</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>此時正則通常要使用分組引用(分組捕獲)功能</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>個,字符串實例<b>4</b>個,正則實例<b>2</b>個</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>的參數問題</strong></p> <p>字符串實例的<b>4</b>個方法參數都支持正則和字符串</p> <p>但<b>search</b>和<b>match</b>把字符串轉換為正則</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>返回結果的格式問題</strong></p> <pre> <b>match</b>返回結果的格式,跟正則對象是否有修飾符<b>g</b>有關</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>,返回的是標準匹配格式,數組的第一個元素時整體匹配的內容,接下來是分組捕獲的內容,然后是整體匹配的第一個下標,最后的輸入的目標字符串</p> <p>有<b>g</b>,返回的是所有匹配的內容</p> <p>當沒有匹配時,不管有沒有<b>g</b>都返回<b>null</b> </p> <p><strong><b>exec</b>比<b>match</b>更強大</strong></p> <pre>當正則沒有<b>g</b>時,使用<b>match</b>返回的信息比較多。但是有<b>g</b>后,就沒有關鍵信息<b>index</b><br>而<b>exec</b>方法就能解決這個問題,它能接著上一次匹配后繼續匹配</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>整體匹配時需要使用<b>^</b>和<b>$</b></strong></p> <pre> <b>test</b>是看目標字符串中是否有子串匹配正則,即有部分匹配即可。</pre> <p>要整體匹配,正則前后需要添加開頭和結尾</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>相關注意事項</strong></p> <p>第一,它可以有第二個參數,表示結果數組的最大長度</p> <pre>var string = "html,css,javascript"; console.log( string.split(/,/, 2) ); // =>["html", "css"]</pre> <p>第二,正則使用分組時,結果數組中是包含分隔符的</p> <pre>var string = "html,css,javascript"; console.log( string.split(/(,)/) ); // =>["html", ",", "css", ",", "javascript"]</pre> <p><strong><b>replace</b>是很強大的</strong></p> <pre> <b>replace</b>有兩種使用形式,它的第二個參數,可以是字符串,也可以是函數。</pre> <p>當第二個參數是字符串時,如下的字符有特殊的含義:</p> <p> <b>$1</b>,<b>$2,...,$99</b> 匹配第<b>1~99</b>個分組里捕獲的文本</p> <p> <b>$&</b> 匹配到的子串文本</p> <p> <b>$</b>` 匹配到的子串的左邊文本</p> <p> <b>$"</b> 匹配到的子串的右邊文本</p> <p> <b>$$</b> 美元符號</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>當第二個參數是函數時,該回調函數的參數具體:</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>,二者變成行的概念,即行開頭和行結尾。單詞是<b>multiline</b> </p> </div> <div id="dhnfjpr" class="mt-64 tags-seach" > <div id="jhx1hll" class="tags-info"> <a style="width:120px;" title="GPU云服務器" href="http://specialneedsforspecialkids.com/site/product/gpu.html">GPU云服務器</a> <a style="width:120px;" title="云服務器" href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo">云服務器</a> <a style="width:120px;" title="正則正則表達式" href="http://specialneedsforspecialkids.com/yun/tag/zhengzezhengzebiaodashi/">正則正則表達式</a> <a style="width:120px;" title="正則匹配正則表達式" href="http://specialneedsforspecialkids.com/yun/tag/zhengzepipeizhengzebiaodashi/">正則匹配正則表達式</a> <a style="width:120px;" title="-正則表達式" href="http://specialneedsforspecialkids.com/yun/tag/-zhengzebiaodashi/">-正則表達式</a> <a style="width:120px;" title="正則表達式?" href="http://specialneedsforspecialkids.com/yun/tag/zhengzebiaodashi?/">正則表達式?</a> </div> </div> <div id="bpllrhz" class="entry-copyright mb-30"> <p class="mb-15"> 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。</p> <p>轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95564.html</p> </div> <ul class="pre-next-page"> <li id="hblpfhv" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/95563.html">上一篇:讓 IDEA 支持 直接執行 TypeScript 的插件</a></li> <li id="77fpzxt" class="ellipsis"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/95565.html">下一篇:JS中幾種包含for的遍歷方式</a></li> </ul> </div> <div id="hd5vbpt" class="about_topicone-mid"> <h3 class="top-com-title mb-0"><span data-id="0">相關文章</span></h3> <ul class="com_white-left-mid atricle-list-box"> <li> <div id="vt7tllx" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/92730.html"><b><em>正則</em><em>表<em>達式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:本文內容共正則表達式火拼系列正則表達式回溯法原理學習正則表達式,是需要懂點兒匹配原理的。正則表達式迷你書問世了讓幫你生成和解析參數字符串最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。 JS 的正則表達式 正則表達式 一種幾乎可以在所有的程序設計語言里和所有的計算機平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...</p> <div id="tl7ld7t" class="com_white-left-info"> <div id="7ndxphl" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1119.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/11/small_000001119.jpg" alt=""><span id="j7t5j5h" class="layui-hide64">bang590</span></a> <time datetime="">2019-08-22 13:59</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="vrptznd" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/95028.html"><b>JS中的<em>正則</em><em>表<em>達式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:構造函數可以有兩個字符串參數,第一個參數包含正則表達式的主體部分。只讀的布爾值,說明這個正則表達式是否帶有修飾符。中正則的擴展構造函數在中,只能接受字符串作為參數,允許其直接接受正則表達式作為參數。 上文傳送門:初探正則表達式 正則表達式是一個描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達式,String 和 RegExp 都定義了方法,后者使用正則表達式進...</p> <div id="5xbxnnn" class="com_white-left-info"> <div id="77bx575" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-939.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/09/small_000000939.jpg" alt=""><span id="zrbhbp5" class="layui-hide64">Soarkey</span></a> <time datetime="">2019-08-22 17:17</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="dlrh5nl" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/95967.html"><b>JavaScript<em>正則</em><em>表<em>達式</em></em>總結</b></a></h2> <p class="ellipsis2 good">摘要:正則表達式一直是里比較難以掌握的點。在中創建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結下,希望...</p> <div id="dvnpjxx" class="com_white-left-info"> <div id="tldp555" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1094.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/10/small_000001094.jpg" alt=""><span id="txzt7xl" class="layui-hide64">big_cat</span></a> <time datetime="">2019-08-22 18:32</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="b7xdhrp" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/78274.html"><b><em>正則</em>與JS中的<em>正則</em></b></a></h2> <p class="ellipsis2 good">摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語言對于正則不同支持參考單行模式與多行模式通過設置正則表達式后的修飾符可開啟對應的匹配模式單行模式和多行模式。 最近這段時間幫同學處理一些文檔, 涉及到一些結構化文檔的工作大部分都得使用正則表達式, 之前對于正則的認識大多來源于語言書上那幾頁的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個整理。因為對JS了解多點,所...</p> <div id="xlrh7v5" class="com_white-left-info"> <div id="n7h7lnr" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-564.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/05/small_000000564.jpg" alt=""><span id="hnfxftj" class="layui-hide64">firim</span></a> <time datetime="">2019-08-19 17:11</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="pnhvbdr" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/84892.html"><b>JavaScript<em>正則</em><em>表<em>達式</em></em>的匹配模式</b></a></h2> <p class="ellipsis2 good">摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...</p> <div id="fp77rpp" class="com_white-left-info"> <div id="bn5xdd7" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-220.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/02/small_000000220.jpg" alt=""><span id="7fvx7dd" class="layui-hide64">wqj97</span></a> <time datetime="">2019-08-20 18:56</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> <li> <div id="75j5lxn" class="atricle-list-right"> <h2 class="ellipsis2"><a class="hpf" href="http://specialneedsforspecialkids.com/yun/90260.html"><b><em>正則</em><em>表<em>達式</em></em></b></a></h2> <p class="ellipsis2 good">摘要:最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。學習目標了解正則表達式語法在中使用正則表達式在中使 JS高級技巧 本篇是看的《JS高級程序設計》第23章《高級技巧》做的讀書分享。本篇按照書里的思路根據自己的理解和經驗,進行擴展延伸,同時指出書里的一些問題。將會討論安全的類型檢測、惰性載入函數、凍結對象、定時器等話題。1. 安全的類型檢測...</p> <div id="dpvpj7j" class="com_white-left-info"> <div id="nldh5ff" class="com_white-left-infol"> <a href="http://specialneedsforspecialkids.com/yun/u-1489.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/14/small_000001489.jpg" alt=""><span id="pdzdj5t" class="layui-hide64">yibinnn</span></a> <time datetime="">2019-08-21 17:57</time> <span><i class="fa fa-commenting"></i>評論0</span> <span><i class="fa fa-star"></i>收藏0</span> </div> </div> </div> </li> </ul> </div> <div id="vjb7rd5" class="topicone-box-wangeditor"> <h3 class="top-com-title mb-64"><span>發表評論</span></h3> <div id="t5lt7v7" class="xcp-publish-main flex_box_zd"> <div id="ffjdj5f" class="unlogin-pinglun-box"> <a href="javascript:login()" class="grad">登陸后可評論</a> </div> </div> </div> <div id="lxptj7x" class="site-box-content"> <div id="7fvz5pt" class="site-content-title"> <h3 class="top-com-title mb-64"><span>0條評論</span></h3> </div> <div id="vbbd5rd" class="pages"></ul></div> </div> </div> <div id="97hxbdp" class="layui-col-md4 layui-col-lg3 com_white-right site-wrap-right"> <div id="hv7rvht" class=""> <div id="r7zrxxh" class="com_layuiright-box user-msgbox"> <a href="http://specialneedsforspecialkids.com/yun/u-1663.html"><img src="http://specialneedsforspecialkids.com/yun/data/avatar/000/00/16/small_000001663.jpg" alt=""></a> <h3><a href="http://specialneedsforspecialkids.com/yun/u-1663.html" rel="nofollow">Dean</a></h3> <h6>男<span>|</span>高級講師</h6> <div id="zxb7jtt" class="flex_box_zd user-msgbox-atten"> <a href="javascript:attentto_user(1663)" id="attenttouser_1663" class="grad follow-btn notfollow attention">我要關注</a> <a href="javascript:login()" title="發私信" >我要私信</a> </div> <div id="n7xd5rp" class="user-msgbox-list flex_box_zd"> <h3 class="hpf">TA的文章</h3> <a href="http://specialneedsforspecialkids.com/yun/ut-1663.html" class="box_hxjz">閱讀更多</a> </div> <ul class="user-msgbox-ul"> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/121952.html">Linux環境基礎開發工具使用</a></h3> <p>閱讀 3527<span>·</span>2021-10-09 09:41</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/121871.html">SpinServers:圣何塞服務器75折優惠,亞洲優化線路,10Gbps帶寬,月付$126起</a></h3> <p>閱讀 2733<span>·</span>2021-10-08 10:18</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119805.html">聽說看了這份Java學習路線的同學,畢業都拿到了大廠offer</a></h3> <p>閱讀 2164<span>·</span>2021-09-10 10:51</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119761.html">拉繩位移傳感器的有關知識建議大家收藏</a></h3> <p>閱讀 2668<span>·</span>2021-09-10 10:50</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119621.html">Chapter1 大數據概述</a></h3> <p>閱讀 763<span>·</span>2021-09-09 09:33</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/119322.html">老用戶購買阿里云服務器首選優惠活動:爆款特惠活動</a></h3> <p>閱讀 3369<span>·</span>2021-09-06 15:14</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/114774.html">2019年前端面試題-01</a></h3> <p>閱讀 3002<span>·</span>2019-08-30 11:06</p></li> <li><h3 class="ellipsis"><a href="http://specialneedsforspecialkids.com/yun/112900.html">深入理解 CSS:字體度量、line-height 和 vertical-align</a></h3> <p>閱讀 3230<span>·</span>2019-08-29 14:04</p></li> </ul> </div> <!-- 文章詳情右側廣告--> <div id="th5d77h" class="com_layuiright-box"> <h6 class="top-com-title"><span>最新活動</span></h6> <div id="bptzd5x" class="com_adbox"> <div id="pfvpvvx" class="layui-carousel" id="right-item"> <div carousel-item> <div> <a href="http://specialneedsforspecialkids.com/site/active/kuaijiesale.html?ytag=seo" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240625/2rTjEHmi.png" alt="云服務器"> </a> </div> <div> <a href="http://specialneedsforspecialkids.com/site/product/gpu.html" rel="nofollow"> <img src="http://specialneedsforspecialkids.com/yun/data/attach/240807/7NjZjdrd.png" alt="GPU云服務器"> </a> </div> </div> </div> </div> <!-- banner結束 --> <div id="drvzfh7" class="adhtml"> </div> <script> $(function(){ $.ajax({ type: "GET", url:"http://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="577pjxz" class="site-tree-mobile layui-hide"> <i class="layui-icon layui-icon-spread-left"></i> </div> <!-- wap遮罩層 --> <div id="7tvrllz" class="site-mobile-shade"></div> <!--付費閱讀 --> <div class="7fxzfth" id="payread"> <div id="hvlbttv" class="layui-form-item">閱讀需要支付1元查看</div> <div id="trz5vj7" 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("復制代碼 ").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("復制成功") }); clipboard.on('error', function(e) { alert("復制失敗") }); } //$(".site-seo-depict").html($(".site-seo-depict").html().slice(0, -5)); </script> <link rel="stylesheet" type="text/css" href="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/styles/tomorrow-night-eighties.css"> <script src="http://specialneedsforspecialkids.com/yun/static/js/neweditor/code/highlight.pack.js" type="text/javascript"></script> <script src="http://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:"付費閱讀", shadeClose: true, content: $('#payread') }); } // 舉報 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; //加載評論 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("評論內容不能為空"); 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://specialneedsforspecialkids.com/yun/index.php?topic/ajaxhassupport/" + tid, cache: false, success: function(hassupport){ if (hassupport != '1'){ $.ajax({ type: "GET", cache:false, url: "http://specialneedsforspecialkids.com/yun/index.php?topic/ajaxaddsupport/" + tid, success: function(comments) { supportobj.find("span").html(comments+"人贊"); } }); }else{ alert("您已經贊過"); } } }); }); function attenquestion(_tid,_rs){ $.ajax({ //提交數據的類型 POST GET type:"POST", //提交的網址 url:"http://specialneedsforspecialkids.com/yun/favorite/topicadd.html", //提交的數據 data:{tid:_tid,rs:_rs}, //返回數據的格式 datatype: "json",//"xml", "html", "script", "json", "jsonp", "text". //在請求之前調用的函數 beforeSend:function(){}, //成功返回之后調用的函數 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) } } , //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ postadopt=true; }, //調用出錯執行的函數 error: function(){ //請求出錯處理 postadopt=false; } }); } </script> <footer> <div id="nndvjxn" class="layui-container"> <div id="nntx5z5" class="flex_box_zd"> <div id="x7p7rdd" class="left-footer"> <h6><a href="http://specialneedsforspecialkids.com/"><img src="http://specialneedsforspecialkids.com/yun/static/theme/ukd//images/logo.png" alt="UCloud (優刻得科技股份有限公司)"></a></h6> <p>UCloud (優刻得科技股份有限公司)是中立、安全的云計算服務平臺,堅持中立,不涉足客戶業務領域。公司自主研發IaaS、PaaS、大數據流通平臺、AI服務平臺等一系列云計算產品,并深入了解互聯網、傳統企業在不同場景下的業務需求,提供公有云、混合云、私有云、專有云在內的綜合性行業解決方案。</p> </div> <div id="hrjztfd" class="right-footer layui-hidemd"> <ul class="flex_box_zd"> <li> <h6>UCloud與云服務</h6> <p><a href="http://specialneedsforspecialkids.com/site/about/intro/">公司介紹</a></p> <p><a >加入我們</a></p> <p><a href="http://specialneedsforspecialkids.com/site/ucan/onlineclass/">UCan線上公開課</a></p> <p><a href="http://specialneedsforspecialkids.com/site/solutions.html" >行業解決方案</a></p> <p><a href="http://specialneedsforspecialkids.com/site/pro-notice/">產品動態</a></p> </li> <li> <h6>友情鏈接</h6> <p><a >GPU算力平臺</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>社區欄目</h6> <p><a href="http://specialneedsforspecialkids.com/yun/column/index.html">專欄文章</a></p> <p><a href="http://specialneedsforspecialkids.com/yun/udata/">專題地圖</a></p> </li> <li> <h6>常見問題</h6> <p><a href="http://specialneedsforspecialkids.com/site/ucsafe/notice.html" >安全中心</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/recent/" >新聞動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/about/news/report/">媒體動態</a></p> <p><a href="http://specialneedsforspecialkids.com/site/cases.html">客戶案例</a></p> <p><a href="http://specialneedsforspecialkids.com/site/notice/">公告</a></p> </li> <li> <span><img src="https://static.ucloud.cn/7a4b6983f4b94bcb97380adc5d073865.png" alt="優刻得"></span> <p>掃掃了解更多</p></div> </div> <div id="ll55575" class="copyright">Copyright ? 2012-2023 UCloud 優刻得科技股份有限公司<i>|</i><a rel="nofollow" >滬公網安備 31011002000058號</a><i>|</i><a rel="nofollow" ></a> 滬ICP備12020087號-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://specialneedsforspecialkids.com/" title="国产xxxx99真实实拍">国产xxxx99真实实拍</a> <div class="friend-links"> <a href="http://belistarlp.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="n7hdh" class="pl_css_ganrao" style="display: none;"><ruby id="n7hdh"><thead id="n7hdh"></thead></ruby><sub id="n7hdh"><thead id="n7hdh"></thead></sub><legend id="n7hdh"></legend><p id="n7hdh"></p><ruby id="n7hdh"><thead id="n7hdh"></thead></ruby><acronym id="n7hdh"><legend id="n7hdh"><th id="n7hdh"><b id="n7hdh"></b></th></legend></acronym><u id="n7hdh"><mark id="n7hdh"><acronym id="n7hdh"><legend id="n7hdh"></legend></acronym></mark></u><ol id="n7hdh"><style id="n7hdh"></style></ol><meter id="n7hdh"><ol id="n7hdh"><style id="n7hdh"><nobr id="n7hdh"></nobr></style></ol></meter><nobr id="n7hdh"></nobr><em id="n7hdh"><div id="n7hdh"><ol id="n7hdh"><i id="n7hdh"></i></ol></div></em><tt id="n7hdh"></tt><font id="n7hdh"><div id="n7hdh"><ol id="n7hdh"><style id="n7hdh"></style></ol></div></font><big id="n7hdh"></big><listing id="n7hdh"><dfn id="n7hdh"></dfn></listing><style id="n7hdh"><video id="n7hdh"><em id="n7hdh"><meter id="n7hdh"></meter></em></video></style><dfn id="n7hdh"></dfn><big id="n7hdh"></big><big id="n7hdh"></big><meter id="n7hdh"><pre id="n7hdh"></pre></meter><strong id="n7hdh"><dfn id="n7hdh"></dfn></strong><style id="n7hdh"><nobr id="n7hdh"><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small></nobr></style><label id="n7hdh"><video id="n7hdh"></video></label><thead id="n7hdh"><big id="n7hdh"><dl id="n7hdh"><pre id="n7hdh"></pre></dl></big></thead><ins id="n7hdh"></ins><font id="n7hdh"><div id="n7hdh"><pre id="n7hdh"><i id="n7hdh"></i></pre></div></font><dl id="n7hdh"></dl><legend id="n7hdh"><var id="n7hdh"><label id="n7hdh"><video id="n7hdh"></video></label></var></legend><pre id="n7hdh"><i id="n7hdh"><strong id="n7hdh"><dfn id="n7hdh"></dfn></strong></i></pre><dfn id="n7hdh"><output id="n7hdh"><sub id="n7hdh"><strike id="n7hdh"></strike></sub></output></dfn><thead id="n7hdh"></thead><optgroup id="n7hdh"></optgroup><strong id="n7hdh"><optgroup id="n7hdh"></optgroup></strong><meter id="n7hdh"><pre id="n7hdh"></pre></meter><label id="n7hdh"><rp id="n7hdh"></rp></label><sub id="n7hdh"></sub><progress id="n7hdh"><acronym id="n7hdh"></acronym></progress><div id="n7hdh"></div><label id="n7hdh"><strong id="n7hdh"><track id="n7hdh"><tt id="n7hdh"></tt></track></strong></label><output id="n7hdh"><ol id="n7hdh"><i id="n7hdh"><nobr id="n7hdh"></nobr></i></ol></output><meter id="n7hdh"><pre id="n7hdh"></pre></meter><meter id="n7hdh"><ol id="n7hdh"></ol></meter><th id="n7hdh"><b id="n7hdh"></b></th><legend id="n7hdh"><sup id="n7hdh"><u id="n7hdh"><ins id="n7hdh"></ins></u></sup></legend><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small><tt id="n7hdh"><progress id="n7hdh"></progress></tt><thead id="n7hdh"><label id="n7hdh"><optgroup id="n7hdh"><ruby id="n7hdh"></ruby></optgroup></label></thead><big id="n7hdh"><label id="n7hdh"><strong id="n7hdh"><th id="n7hdh"></th></strong></label></big><var id="n7hdh"></var><meter id="n7hdh"><ol id="n7hdh"></ol></meter><ruby id="n7hdh"></ruby><i id="n7hdh"></i><dl id="n7hdh"></dl><font id="n7hdh"><legend id="n7hdh"><ol id="n7hdh"><label id="n7hdh"></label></ol></legend></font><p id="n7hdh"><dfn id="n7hdh"></dfn></p><rp id="n7hdh"><address id="n7hdh"></address></rp><ruby id="n7hdh"><thead id="n7hdh"></thead></ruby><strong id="n7hdh"><ruby id="n7hdh"></ruby></strong><address id="n7hdh"><p id="n7hdh"></p></address><sup id="n7hdh"><form id="n7hdh"><rp id="n7hdh"><font id="n7hdh"></font></rp></form></sup><thead id="n7hdh"><label id="n7hdh"><strong id="n7hdh"><th id="n7hdh"></th></strong></label></thead><optgroup id="n7hdh"><ruby id="n7hdh"></ruby></optgroup><big id="n7hdh"><dl id="n7hdh"><strong id="n7hdh"><th id="n7hdh"></th></strong></dl></big><form id="n7hdh"><legend id="n7hdh"></legend></form><ins id="n7hdh"><address id="n7hdh"><legend id="n7hdh"><sup id="n7hdh"></sup></legend></address></ins><em id="n7hdh"><meter id="n7hdh"><pre id="n7hdh"><i id="n7hdh"></i></pre></meter></em><th id="n7hdh"></th><ins id="n7hdh"><form id="n7hdh"></form></ins><label id="n7hdh"></label><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small><listing id="n7hdh"><small id="n7hdh"></small></listing><u id="n7hdh"><rp id="n7hdh"></rp></u><form id="n7hdh"><p id="n7hdh"><var id="n7hdh"><form id="n7hdh"></form></var></p></form><dl id="n7hdh"></dl><strong id="n7hdh"><track id="n7hdh"></track></strong><th id="n7hdh"><b id="n7hdh"></b></th><big id="n7hdh"><dl id="n7hdh"><pre id="n7hdh"><th id="n7hdh"></th></pre></dl></big><mark id="n7hdh"><form id="n7hdh"></form></mark><sup id="n7hdh"><label id="n7hdh"><rp id="n7hdh"><font id="n7hdh"></font></rp></label></sup><form id="n7hdh"></form><p id="n7hdh"></p><var id="n7hdh"><u id="n7hdh"><ins id="n7hdh"><font id="n7hdh"></font></ins></u></var><legend id="n7hdh"><th id="n7hdh"><u id="n7hdh"><mark id="n7hdh"></mark></u></th></legend><pre id="n7hdh"><track id="n7hdh"><b id="n7hdh"><progress id="n7hdh"></progress></b></track></pre><label id="n7hdh"><rp id="n7hdh"></rp></label><menuitem id="n7hdh"></menuitem><th id="n7hdh"></th><dfn id="n7hdh"><u id="n7hdh"></u></dfn><nobr id="n7hdh"></nobr><ruby id="n7hdh"><thead id="n7hdh"></thead></ruby><div id="n7hdh"></div><label id="n7hdh"><video id="n7hdh"></video></label><label id="n7hdh"><strong id="n7hdh"></strong></label><progress id="n7hdh"></progress><rp id="n7hdh"></rp><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small><b id="n7hdh"><mark id="n7hdh"></mark></b><tt id="n7hdh"><progress id="n7hdh"><acronym id="n7hdh"><legend id="n7hdh"></legend></acronym></progress></tt><legend id="n7hdh"><sup id="n7hdh"><label id="n7hdh"><rp id="n7hdh"></rp></label></sup></legend><em id="n7hdh"></em><ins id="n7hdh"><address id="n7hdh"><p id="n7hdh"><sup id="n7hdh"></sup></p></address></ins><legend id="n7hdh"></legend><form id="n7hdh"><ins id="n7hdh"></ins></form><thead id="n7hdh"><thead id="n7hdh"></thead></thead><ins id="n7hdh"><address id="n7hdh"><legend id="n7hdh"><sup id="n7hdh"></sup></legend></address></ins><b id="n7hdh"><mark id="n7hdh"><form id="n7hdh"><p id="n7hdh"></p></form></mark></b><progress id="n7hdh"></progress><listing id="n7hdh"></listing><strike id="n7hdh"><strong id="n7hdh"></strong></strike><small id="n7hdh"><menuitem id="n7hdh"></menuitem></small><i id="n7hdh"></i><em id="n7hdh"><div id="n7hdh"><ol id="n7hdh"><i id="n7hdh"></i></ol></div></em><ol id="n7hdh"><style id="n7hdh"></style></ol><sub id="n7hdh"><strike id="n7hdh"></strike></sub><dl id="n7hdh"><pre id="n7hdh"></pre></dl><var id="n7hdh"><form id="n7hdh"><ins id="n7hdh"><font id="n7hdh"></font></ins></form></var><rp id="n7hdh"></rp><i id="n7hdh"><nobr id="n7hdh"></nobr></i><mark id="n7hdh"><acronym id="n7hdh"><legend id="n7hdh"><var id="n7hdh"></var></legend></acronym></mark><pre id="n7hdh"></pre><ruby id="n7hdh"><sub id="n7hdh"><big id="n7hdh"><dl id="n7hdh"></dl></big></sub></ruby><legend id="n7hdh"><dfn id="n7hdh"><b id="n7hdh"><mark id="n7hdh"></mark></b></dfn></legend><legend id="n7hdh"><th id="n7hdh"><b id="n7hdh"><ins id="n7hdh"></ins></b></th></legend><u id="n7hdh"><mark id="n7hdh"><acronym id="n7hdh"><p id="n7hdh"></p></acronym></mark></u><tt id="n7hdh"><progress id="n7hdh"></progress></tt><p id="n7hdh"></p><mark id="n7hdh"><address id="n7hdh"></address></mark><em id="n7hdh"></em><big id="n7hdh"></big><dfn id="n7hdh"></dfn><sub id="n7hdh"><thead id="n7hdh"></thead></sub><legend id="n7hdh"><var id="n7hdh"><label id="n7hdh"><rp id="n7hdh"></rp></label></var></legend><legend id="n7hdh"></legend><ruby id="n7hdh"><thead id="n7hdh"></thead></ruby><div id="n7hdh"><ol id="n7hdh"></ol></div><rp id="n7hdh"></rp><strong id="n7hdh"><track id="n7hdh"></track></strong><sub id="n7hdh"></sub><p id="n7hdh"><var id="n7hdh"><form id="n7hdh"><rp id="n7hdh"></rp></form></var></p><dl id="n7hdh"></dl><legend id="n7hdh"><sup id="n7hdh"><label id="n7hdh"><video id="n7hdh"></video></label></sup></legend><acronym id="n7hdh"><p id="n7hdh"><var id="n7hdh"><form id="n7hdh"></form></var></p></acronym><meter id="n7hdh"></meter><dfn id="n7hdh"></dfn><th id="n7hdh"></th><legend id="n7hdh"><dfn id="n7hdh"></dfn></legend><dfn id="n7hdh"></dfn><small id="n7hdh"></small><sup id="n7hdh"></sup></div> <script src="http://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>