溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

日常收集JS正則表達(dá)式有哪些

發(fā)布時(shí)間:2021-09-28 16:54:48 來(lái)源:億速云 閱讀:118 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下日常收集JS正則表達(dá)式有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

RegExp直接量和對(duì)象的創(chuàng)建

就像字符串和數(shù)字一樣,程序中每個(gè)取值相同的原始類型直接量均表示相同的值,這是顯而易見的。程序運(yùn)行時(shí)每次遇到對(duì)象直接量(初始化表達(dá)式)諸如{}和[]的時(shí)候都會(huì)創(chuàng)建新對(duì)象。比如,如果在循環(huán)體中寫var a = [],則每次遍歷都會(huì)創(chuàng)建一個(gè)新的空數(shù)組。正則表達(dá)式直接量則與此不同,ECMAScript 3規(guī)范規(guī)定,一個(gè)正則表達(dá)式直接量會(huì)在執(zhí)行到它時(shí)轉(zhuǎn)換為一個(gè)RegExp對(duì)象,同一段代碼所表示正則表達(dá)式直接量的每次運(yùn)算都返回同一個(gè)對(duì)象。ECMAScript 5規(guī)范則做了相反的規(guī)定,同一段代碼所表示的正則表達(dá)式直接量的每次運(yùn)算都返回新對(duì)象。I E一直都是按照EC-MAScript 5規(guī)范實(shí)現(xiàn)的,多數(shù)最新版本的瀏覽器也開始遵循EC-MAScript 5,盡管目前該標(biāo)準(zhǔn)并未全面廣泛推行。

1.1直接量字符

正則表達(dá)式中的所有字母和數(shù)字都是按照字面含義進(jìn)行匹配的。JavaScript正則表達(dá)式語(yǔ)法也支持非字母的字符匹配,這些字符需要通過反斜線(\)作為前綴進(jìn)行轉(zhuǎn)義。比如,轉(zhuǎn)義字符\n用以匹配換行符。表10-1中列出了這些轉(zhuǎn)義字符。

表10-1:正則表達(dá)式中的直接量字符

字符匹配
字母和數(shù)字字符自身
\oNUL字符(\u0000)
\t制表符(\u0009)
\n換行符(\u000A)
\v垂直制表符(\u000B)
\f換頁(yè)符(\u000C)
\r回車符(\u000D)
\xnn由十六進(jìn)制數(shù)nn指定的拉丁字符,例如,\x0A等價(jià)于\n
\uxxxx由十六進(jìn)制數(shù)xxxx指定的Unicode字符,例如\u0009等價(jià)于\t
\cX控制字符^X,例如,\cJ等價(jià)于換行符\n
在正則表達(dá)式中,許多標(biāo)點(diǎn)符號(hào)具有特殊含義,它們是:^ $ . * + ? = ! : | \ / ( ) [ ] { }

正則表達(dá)式“/\/”用以匹配任何包含反斜線的字符串。

1.2字符類

例如,/[\u0400-\u04FF]/用以匹配所有的Cyrillic字符)。

表10-2:正則表達(dá)式的字符類

字符匹配
[...]方括號(hào)內(nèi)的任意字符
[^...]不在方括號(hào)內(nèi)的任意字符
.除換行符和其他Unicode行終止符之外的任意字符
\w任何ASCII字符組成的單詞,等價(jià)于[a-zA-Z0-9]
\W任何不是ASCII字符組成的單詞,等價(jià)于[^a-zA-Z0-9]
\s任何Unicode空白符
\S任何非Unicode空白符的字符,注意\w和\S不同
\d任何ASCII數(shù)字,等價(jià)于[0-9]
\D除了ASCII數(shù)字之外的任何字符,等價(jià)于[^0-9]
\b退格直接量(特例)

注意,在方括號(hào)之內(nèi)也可以寫這些特殊轉(zhuǎn)義字符。比如,由于\s匹配所有的空白字符,\d匹配的是所有數(shù)字,因此/[\s\d]/就匹配任意空白符或者數(shù)字。注意,這里有一個(gè)特例。下面我們將會(huì)看到轉(zhuǎn)義符\b具有的特殊含義,當(dāng)用在字符類中時(shí),它表示的是退格符,所以要在正則表達(dá)式中按照直接量表示一個(gè)退格符,只需要使用具有一個(gè)元素的字符類/[\b]/。

1.3重復(fù)

我們?cè)谡齽t模式之后跟隨用以指定字符重復(fù)的標(biāo)記。由于某些重復(fù)種類非常常用,因此就有一些專門用于表示這種情況的特殊字符。例如,“+”用以匹配前一個(gè)模式的一個(gè)或多個(gè)副本。表10-3總結(jié)了這些表示重復(fù)的正則語(yǔ)法。

表10-3:正則表達(dá)式的重復(fù)字符語(yǔ)法

字符含義
{n,m}匹配前一項(xiàng)至少n次,但不能超過m次
{n,}匹配前一項(xiàng)至少n次
{n}匹配前一頂n次
?匹配前一項(xiàng)0次或者1次,也就是說(shuō)前一項(xiàng)是可選的,等價(jià)于{0,1}
+匹配前一項(xiàng)1次或多次,等價(jià)于{1,}
*匹配前一項(xiàng)0次或多次,等價(jià)于{0,}

這里有一些例子:

/\d{2,4}/ // 匹配2~4個(gè)數(shù)字

/\w{3}\d?/ // 精確匹配三個(gè)單詞和一個(gè)可選的數(shù)字

/\s+java\s+/ // 匹配前后帶有一個(gè)或多個(gè)空格的字符串"java"

/[^(]/ // 匹配一個(gè)或多個(gè)非左括號(hào)的字符

在使用“”和“?”時(shí)要注意,由于這些字符可能匹配0個(gè)字符,因此它們?cè)试S什么都不匹配。例如,正則表達(dá)式/a*/實(shí)際上與字符串“bbbb”匹配,因?yàn)檫@個(gè)字符串含有0個(gè)a。

非貪婪的重復(fù)

表10-3中列出的匹配重復(fù)字符是盡可能多地匹配,而且允許后續(xù)的正則表達(dá)式繼續(xù)匹配。因此,我們稱之為“貪婪的”匹配。我們同樣可以使用正則表達(dá)式進(jìn)行非貪婪匹配。只須在待匹配的字符后跟隨一個(gè)問號(hào)即可:“??”、“+?”、“*?”或“{1,5}?”。比如,正則表達(dá)式/a+/可以匹配一個(gè)或多個(gè)連續(xù)的字母a。當(dāng)使用“aaa”作為匹配字符串時(shí),正則表達(dá)式會(huì)匹配它的三個(gè)字符。但是/a+?/也可以匹配一個(gè)或多個(gè)連續(xù)字母a,但它是盡可能少地匹配。我們同樣將“aaa”作為匹配字符串,但后一個(gè)模式只能匹配第一個(gè)a。

使用非貪婪的匹配模式所得到的結(jié)果可能和期望并不一致??紤]以下正則表達(dá)式/a+b/,它可以匹配一個(gè)或多個(gè)a,以及一個(gè)b。當(dāng)使用“aaab”作為匹配字符串時(shí),它會(huì)匹配整個(gè)字符串。現(xiàn)在再試一下非貪婪匹配的版本/a+?b/,它匹配盡可能少的a和一個(gè)b。當(dāng)用它來(lái)匹配“aaab”時(shí),你期望它能匹配一個(gè)a和最后一個(gè)b。但實(shí)際上,這個(gè)模式卻匹配了整個(gè)字符串,和該模式的貪婪匹配一模一樣。這是因?yàn)檎齽t表達(dá)式的模式匹配總是會(huì)尋找字符串中第一個(gè)可能匹配的位置。由于該匹配是從字符串的第一個(gè)字符開始的,因此在這里不考慮它的子串中更短的匹配。

1.4選擇、分組和引用

正則表達(dá)式的語(yǔ)法還包括指定選擇項(xiàng)、子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。字符“|”用于分隔供選擇的字符。例如,/ab|cd|ef/可以匹配字符串“ab”,也可以匹配字符串“cd”,還可以匹配字符串“ef”。/\d{3}|[a-z]{4}/匹配的是三位數(shù)字或者四個(gè)小寫字母。

注意,選擇項(xiàng)的嘗試匹配次序是從左到右,直到發(fā)現(xiàn)了匹配項(xiàng)。如果左邊的選擇項(xiàng)匹配,就忽略右邊的匹配項(xiàng),即使它產(chǎn)生更好的匹配。因此,當(dāng)正則表達(dá)式/a|ab/匹配字符串“ab”時(shí),它只能匹配第一個(gè)字符。

表10-4:正則表達(dá)式的選擇、分組和引用字符

字符含義
|選擇,匹配的是該符號(hào)左邊的子表達(dá)式或右邊的子表達(dá)式
(...)組合,將幾個(gè)項(xiàng)組合為一個(gè)單元,這個(gè)單元可通過“*”、“+”、“?”和“|”等符號(hào)加以修飾,而且可以記住和這個(gè)組合相匹配的字符串以供此后的引用使用
(?:...)只組合,把項(xiàng)組合到一個(gè)單元,但不記憶與該組相匹配的字符
\n和第n個(gè)分組第一次匹配的字符相匹配,組是圓括號(hào)中的子表達(dá)式(也有可能是嵌套的),組索引是從左到右的左括號(hào)數(shù),“(?:”形式的分組不編碼

1.5指定匹配位置

正如前面所介紹的,正則表達(dá)式中的多個(gè)元素才能夠匹配字符串的一個(gè)字符。例如,\s匹配的只是一個(gè)空白符。還有一些正則表達(dá)式的元素匹配的是字符之間的位置,而不是實(shí)際的字符。
最常用的錨元素是^,它用來(lái)匹配字符串的開始,錨元素$用以匹配字符串的結(jié)束。

表10-5:正則表達(dá)式中的錨字符

字符含義
^匹配字符串的開頭,在多行檢索中,匹配一行的開頭
$匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾
\b匹配一個(gè)單詞的邊界,簡(jiǎn)言之,就是位于字符\w和\W之間的位置,或位于字符\w和字符串的開頭或者結(jié)尾之間的位置(但需要注意,[\b]匹配的是退格符)
\B匹配非單詞邊界的位置
(?=p)零寬正向先行斷言,要求接下來(lái)的字符都與p匹配,但不能包括匹配p的那些字符
(?!p)零寬負(fù)向先行斷言,要求接下來(lái)的字符不與p匹配

1.6修飾符

正則表達(dá)式中的語(yǔ)法還有最后一個(gè)知識(shí)點(diǎn),即正則表達(dá)式的修飾符,用以說(shuō)明高級(jí)匹配模式的規(guī)則。和之前討論的正則表達(dá)式語(yǔ)法不同,修飾符是放在“/”符號(hào)之外的,也就是說(shuō),它們不是出現(xiàn)在兩條斜線之間,而是第二條斜線之后。JavaScript支持三個(gè)修飾符,修飾符“i”用以說(shuō)明模式匹配是不區(qū)分大小寫的。修飾符“g”說(shuō)明模式匹配應(yīng)該是全局的,也就是說(shuō),應(yīng)該找出被檢索字符串中所有的匹配。修飾符“m”用以在多行模式中執(zhí)行匹配,在這種模式下,如果待檢索的字符串包含多行,那么^和$錨字符除了匹配整個(gè)字符串的開始和結(jié)尾之外,還能匹配每行的開始和結(jié)尾。比如正則表達(dá)式/java$/im可以匹配“java”也可以匹配“Java\nis fun”。

表10-6:正則表達(dá)式修飾符

字符含義
i執(zhí)行不區(qū)分大小寫的匹配
g執(zhí)行一個(gè)全局匹配,簡(jiǎn)言之,即找到所有的匹配,而不是在找到第一個(gè)之后就停止
m多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結(jié)束和字符串的結(jié)束

2.用于模式匹配的String方法

2.1search()

它的參數(shù)是一個(gè)正則表達(dá)式,返回第一個(gè)與之匹配的子串的起始位置,如果找不到匹配的子串,它將返回-1。
如果search()的參數(shù)不是正則表達(dá)式,則首先會(huì)通過RegExp構(gòu)造函數(shù)將它轉(zhuǎn)換成正則表達(dá)式,search()方法不支持全局檢索,因?yàn)樗雎哉齽t表達(dá)式參數(shù)中的修飾符g。

"JavaScript".search(/script/i);  //4

2.2replace()

replace()方法用以執(zhí)行檢索與替換操作。其中第一個(gè)參數(shù)是一個(gè)正則表達(dá)式,第二個(gè)參數(shù)是要進(jìn)行替換的字符串。

"JavaScript".replace(/javascript/gi, "a")  //"a"
// 一段引用文本起始于引號(hào),結(jié)束于引號(hào)
// 中間的內(nèi)容區(qū)域不能包含引號(hào)
var quote = /"([^"]*)"/g;
// 用中文半角引號(hào)替換英文引號(hào),同時(shí)要保持引號(hào)之間的內(nèi)容(存儲(chǔ)在$1中)沒有被修改
text.replace(quote, '“$1”');

2.3match()

match()方法是最常用的String正則表達(dá)式方法。它的唯一參數(shù)就是一個(gè)正則表達(dá)式(或通過RegExp()構(gòu)造函數(shù)將其轉(zhuǎn)換為正則表達(dá)式),返回的是一個(gè)由匹配結(jié)果組成的數(shù)組。

"1 plus 2 equals 3".match(/\d+/g) // 返回 ["1", "2", "3"]
例如,使用如下的代碼來(lái)解析一個(gè)URL:
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/~david";
var result = text.match(url);
if (result != null) {  
 var fullurl = result[0]; 
 // 包含 "http://www.example.com/~david"  
 var protocol = result[1]; 
 // 包含 "http"
 var host = result[2]; 
 // 包含 "www.example.com"  
 var path = result[3]; 
 // 包含 "~david"
}

2.4split()

這個(gè)方法用以將調(diào)用它的字符串拆分為一個(gè)子串組成的數(shù)組,使用的分隔符是split()的參數(shù)

"123,456,789".split(","); // 返回 ["123","456","789"]

split()方法的參數(shù)也可以是一個(gè)正則表達(dá)式,這使得split()方法異常強(qiáng)大。例如,可以指定分隔符,允許兩邊可以留有任意多的空白符:

"1, 2, 3, 4, 5".split(/\s*,\s*/); // 返回 ["1","2","3","4","5"]

3.RegExp對(duì)象

正則表達(dá)式是通過RegExp對(duì)象來(lái)表示的。除了RegExp()構(gòu)造函數(shù)之外,RegExp對(duì)象還支持三個(gè)方法和一些屬性。
RegExp()構(gòu)造函數(shù)帶有兩個(gè)字符串參數(shù),其中第二個(gè)參數(shù)是可選的,RegExp()用以創(chuàng)建新的RegExp對(duì)象。第一個(gè)參數(shù)包含正則表達(dá)式的主體部分,也就是正則表達(dá)式直接量中兩條斜線之間的文本。需要注意的是,不論是字符串直接量還是正則表達(dá)式,都使用“\”字符作為轉(zhuǎn)義字符的前綴,因此當(dāng)給RegExp()傳入一個(gè)字符串表述的正則表達(dá)式時(shí),必須將“\”替換成“\”。RegExp()的第二個(gè)參數(shù)是可選的,如果提供第二個(gè)參數(shù),它就指定正則表達(dá)式的修飾符。不過只能傳入修飾符g、i、m或者它們的組合。比如:

// 全局匹配字符串中的5個(gè)數(shù)字,注意這里使用了"\\",而不是"\"var zipcode = new RegExp("\\d{5}", "g");

3.1 RegExp的屬性

每個(gè)RegExp對(duì)象都包含5個(gè)屬性。屬性source是一個(gè)只讀的字符串,包含正則表達(dá)式的文本。屬性global是一個(gè)只讀的布爾值,用以說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符g。屬性ignore-Case也是一個(gè)只讀的布爾值,用以說(shuō)明正則表達(dá)式是否帶有修飾符i。屬性multiline是一個(gè)只讀的布爾值,用以說(shuō)明正則表達(dá)式是否帶有修飾符m。最后一個(gè)屬性lastIndex,它是一個(gè)可讀/寫的整數(shù)。如果匹配模式帶有g(shù)修飾符,這個(gè)屬性存儲(chǔ)在整個(gè)字符串中下一次檢索的開始位置,這個(gè)屬性會(huì)被exec()和test()方法用到,下面會(huì)講到。

屬性描述FFIE
globalRegExp 對(duì)象是否具有標(biāo)志 g。14
ignoreCaseRegExp 對(duì)象是否具有標(biāo)志 i。14
lastIndex一個(gè)整數(shù),標(biāo)示開始下一次匹配的字符位置。14
multilineRegExp 對(duì)象是否具有標(biāo)志 m。14
source正則表達(dá)式的源文本。14

3.2 RegExp的方法

RegExp對(duì)象定義了兩個(gè)用于執(zhí)行模式匹配操作的方法。它們的行為和上文介紹過的String方法很類似。RegExp最主要的執(zhí)行模式匹配的方法是exec(),它與10.2節(jié)介紹過的String方法match()相似,只是RegExp方法的參數(shù)是一個(gè)字符串,而String方法的參數(shù)是一個(gè)RegExp對(duì)象。

方法描述FFIE
compile編譯正則表達(dá)式。14
exec檢索字符串中指定的值。返回找到的值,并確定其位置。14
test檢索字符串中指定的值。返回 true 或 false。14

3.2.1exec()

var pattern = /Java/g;
var text = "JavaScript is more fun than Java!";
var result;
while ((result = pattern.exec(text)) != null) {  
 alert("Matched '" + 
 result[0] + "'" +    
 " at position " + result.index +    "; 
 next search begins at " + pattern.lastIndex);
}

3.2.2test()

另外一個(gè)RegExp方法是test(),它比exec()更簡(jiǎn)單一些。它的參數(shù)是一個(gè)字符串,用test()對(duì)某個(gè)字符串進(jìn)行檢測(cè),如果包含正則表達(dá)式的一個(gè)匹配結(jié)果,則返回true:

var pattern = /java/i;pattern.test("JavaScript"); // 返回 true

4.常用正則表達(dá)式

//電話號(hào)碼

/^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/

//郵箱

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

//日期(YYYY-MM-DD)

/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/

//IPV4
/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/

//URL
/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i

//數(shù)字(允許 +-123,123.123)

/^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/

//2-20個(gè)英文或中文字符
/^([\u4e00-\u9fa5]{2,20})$|^([a-zA-Z]{2,20})$

以上是“日常收集JS正則表達(dá)式有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI