中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript拆分字符串時產(chǎn)生空字符怎么解決
來源:易賢網(wǎng) 閱讀:1005 次 日期:2014-10-15 15:21:11
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript拆分字符串時產(chǎn)生空字符怎么解決”,方便廣大網(wǎng)友查閱!

一、問題描述

使用JavaScript的split方法拆分字符串時出現(xiàn)一些空字符串"",尤其是當(dāng)使用正則表達(dá)式作為分隔符的時候。

二、相關(guān)問題

javascript正則表達(dá)式對字符串分組時產(chǎn)生空字符串組?

在上面這個問題中,題主使用正則表達(dá)式對字符串進(jìn)行分割時產(chǎn)生了多個空字符串"",代碼如下:

代碼如下:

'張sdf四上法asdf翁芬aa33網(wǎng)s'.split(/([u4e00-u9fa5]{1})/gi);

//輸出["", "張", "sdf", "四", "", "上", "", "法", "asdf", "翁", "", "芬", "aa33", "網(wǎng)", "s"]

那么,產(chǎn)生這些空字符串的原因是什么?

三、問題分析

在Google上搜索了一番,發(fā)現(xiàn)相關(guān)的結(jié)果并不多,即便有,詳細(xì)解釋的也不多,大概的說了一下,然后就給出了一個ECMAScript規(guī)范的鏈接。看來要想知道真正的原因,就只能硬著頭皮看規(guī)范了。

四、相關(guān)標(biāo)準(zhǔn)

那么,接下來,按照國際慣例,先上ECMAScript的標(biāo)準(zhǔn)鎮(zhèn)樓。

代碼如下:

String.prototype.split (separator, limit)

這個章節(jié)詳細(xì)介紹了split方法的執(zhí)行步驟,如果感興趣的話可以一步一步的認(rèn)真看完,我在這里只把和產(chǎn)生空字符串相關(guān)的步驟拿出來解釋一下,不當(dāng)之處,歡迎大家提出。

五、相關(guān)步驟

摘取部分步驟:

整個過程中最主要的步驟是第13步這個循環(huán),而這個循環(huán)主要做的事情如下:

定義p, q的值,每一次循環(huán)開始的時候p和q的值是相同的(該步驟在循環(huán)之外);

調(diào)用SplitMatch(S, q, R)這個方法對字符串進(jìn)行拆分;

根據(jù)返回結(jié)果的不同,執(zhí)行不同的分支,主要分支為分支ⅲ;

分支ⅲ又分成了8個小步用來將返回的結(jié)果填充到事先定義好的數(shù)組A中

在這個8小步中,步驟1的作用是返回原始字符串的一個子串,開始位置是p(包含在內(nèi)),結(jié)束位置是q(不包含在內(nèi)),注意:在這一步中會產(chǎn)生空字符串,我將其標(biāo)記為截取字符串,方便下文引用。

將上一步的子串添加到數(shù)組A中

接下來的幾步是更新相關(guān)的變量,繼續(xù)下一次循環(huán)。(步驟7的作用是將正則表達(dá)式中的捕獲分組保存到數(shù)組A中,和產(chǎn)生空字符串無關(guān))

SplitMatch(S, q, R)

接下來,我們需要了解一下SplitMatch(S, q, R)這個方法做了些什么事。這個方法在split規(guī)范中的下方有提及。它主要做的事是,根據(jù)分隔符(separator)的類型進(jìn)行相應(yīng)的操作:

如果分隔符是RegExp類型的,調(diào)用RegExp的內(nèi)部方法[[Match]]來對字符串進(jìn)行匹配,如果匹配失敗,返回failure,否則,返回一個MatchResult類型的結(jié)果。

如果分隔符是字符串,進(jìn)行匹配判斷,失敗返回failure,成功返回MatchResult類型的結(jié)果。

MatchResult

上面的步驟中又引出了一個MatchResult類型的變量。通過查文檔發(fā)現(xiàn),該類型的變量有兩個屬性endIndex和captures,endIndex的值是字符串匹配的位置加上1,captures可以理解為一個數(shù)組,當(dāng)分隔符為正則表達(dá)式時,它里面的元素是分組捕獲的值;當(dāng)分隔符為字符串時,它為一個空數(shù)組。

接下來

我們從上面的步驟可以看出,分割的字符串是在截取字符串這一步驟中產(chǎn)生的(正則表達(dá)式的分組捕獲除外)。它的作用是截取指定開始(包含在內(nèi))和結(jié)束位置(不包含在內(nèi))之間的字符串,那它什么時候會返回""呢?有一種特殊情況是開始位置和結(jié)束位置的值相等,這只是猜想而已,因為該規(guī)范沒有給出截取字符串的規(guī)范步驟。

都走到這里了,為什么不再往前走一步呢?

于是,我試著搜索了一些V8的源碼,看看能不能找到具體的實現(xiàn)方法。確實找到了相關(guān)的代碼,源碼鏈接

這里摘取其中一部分:

代碼如下:

function StringSplitJS(separator, limit) {

...

...

//分隔符是字符串的情況

if (!IS_REGEXP(separator)) {

var separator_string = TO_STRING_INLINE(separator);

if (limit === 0) return [];

// ECMA-262 says that if separator is undefined, the result should

// be an array of size 1 containing the entire string.

if (IS_UNDEFINED(separator)) return [subject];

var separator_length = separator_string.length;

//分隔符是空字符串,直接返回了字符數(shù)組

if (separator_length === 0) return %StringToArray(subject, limit);

var result = %StringSplit(subject, separator_string, limit);

return result;

}

if (limit === 0) return [];

// 分隔符是正則表達(dá)式的情況,調(diào)用StringSplitOnRegExp

return StringSplitOnRegExp(subject, separator, limit, length);

}

//此處省略若干代碼

我在代碼中發(fā)現(xiàn),在填充數(shù)組的時候會調(diào)用%_SubString這個方法來截取字符串,可惜的是我沒有找到他的相關(guān)定義,如果有找到的同學(xué)歡迎告知。但是,我發(fā)現(xiàn)JavaScript中substring這個方法所對應(yīng)的StringSubstring這個方法會調(diào)用%_SubString這個方法,并將其結(jié)果返回。那么如果'abc'.substring(1,1)返回"",則表明%_SubString這個方法在開始位置和結(jié)束位置相同的時候會返回"",結(jié)果大家一試便知。

那么,什么時候會出現(xiàn)開始位置等于結(jié)束位置(即q === p)的情況呢?我按照上面的步驟一步一步的進(jìn)行分析,最終發(fā)現(xiàn):

當(dāng)原始字符串S匹配過一次分隔符之后,緊接著,字符串S的下一個位置還匹配分隔符。如:'abbbc'.split('b'),'abbbc'.split(/(b){1}/)

另一種情況是字符串開頭的一個或幾個字符匹配分隔符。如:'abc'.split('a'),'abc'.split(/ab/)

還有一種情況是字符串結(jié)尾的一個或幾個字符串匹配分隔符,與之相關(guān)的步驟是第14步。

如:'abc'.split('c'),'abc'.split(/bc/)

此外,當(dāng)使用正則表達(dá)式作為分隔符的時候,返回的結(jié)果中還有可能出現(xiàn)undefined。

如:'abc'.split(/(d)*/)

回過頭來再看看開頭的那個例子,是不是滿足上面幾種情況?

六、題外話

這是我第一次這么仔細(xì)的看ECMAScript的標(biāo)準(zhǔn)規(guī)范,看的過程確實很痛苦,但明白之后就感覺很痛快了。也感謝題主提出的這個問題,以及追問。

順便提一句,正則表達(dá)式作為分隔符時,global修飾符g是會被忽略的,這也算是一次額外的收獲。

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript拆分字符串時產(chǎn)生空字符怎么解決
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲在线播放电影| 日韩一级在线观看| 免费欧美视频| 欧美婷婷久久| 国产精品一区二区三区免费观看| 国产欧美短视频| 99国产精品久久久| 久久一区亚洲| 国产精品一区二区三区成人| 亚洲精品国产精品乱码不99 | 亚洲欧美中文另类| 欧美激情一区在线观看| 国产日韩欧美三级| 午夜国产精品视频免费体验区| 欧美黄色一区| 亚洲第一黄色网| 久久精品伊人| 国产热re99久久6国产精品| 日韩写真在线| 欧美激情综合在线| 亚洲国产欧美一区二区三区久久| 久久久777| 激情成人综合| 麻豆成人在线播放| 在线播放不卡| 免费观看欧美在线视频的网站| 国产一区二区欧美| 久久国产欧美精品| 国产一二三精品| 久久精品久久99精品久久| 国产女优一区| 久久精品国产一区二区三| 韩国成人理伦片免费播放| 久久精视频免费在线久久完整在线看| 国产欧美一区二区三区在线看蜜臀| 亚洲综合视频一区| 国产欧美日本在线| 欧美中文字幕在线观看| 狠狠干综合网| 欧美国产一区二区三区激情无套| 亚洲国产精品久久久久| 欧美激情中文字幕乱码免费| 亚洲视频图片小说| 国产一区二区三区视频在线观看| 久久理论片午夜琪琪电影网| 亚洲国内精品| 国产精品久久久久久久久久三级 | 欧美va亚洲va日韩∨a综合色| **性色生活片久久毛片| 欧美成人综合在线| 亚洲视频免费观看| 国产日韩欧美在线播放不卡| 久久在线免费观看视频| 亚洲精品社区| 国产精品videosex极品| 久久精品动漫| 亚洲人成网站精品片在线观看| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美激情诱惑| 亚洲电影视频在线| 国产精品xnxxcom| 久久亚裔精品欧美| 一区二区三区日韩精品视频| 国产婷婷色综合av蜜臀av| 欧美高清视频一二三区| 亚洲欧美日韩直播| 亚洲日本一区二区三区| 国产欧美一区二区精品秋霞影院| 欧美v日韩v国产v| 欧美在线一二三四区| 亚洲日本免费| 国产亚洲精品v| 欧美日韩一区二区三区免费看| 久久精品123| 亚洲视频1区| 亚洲欧洲一区二区三区| 国产农村妇女毛片精品久久麻豆| 欧美激情一区二区| 老司机一区二区三区| 欧美一区二区性| 一区二区三区精品国产| 伊人婷婷欧美激情| 国产亚洲欧美一级| 国产精品久久久对白| 欧美日韩mv| 欧美成人伊人久久综合网| 久久综合网络一区二区| 欧美一区二区视频97| 亚洲综合色自拍一区| 亚洲网友自拍| 亚洲午夜精品久久| 一区二区三区久久精品| 一区二区欧美国产| 亚洲人妖在线| 亚洲精品久久久久久久久久久久久 | 亚洲午夜免费福利视频| 亚洲蜜桃精久久久久久久| 在线观看成人网| 在线播放视频一区| 狠狠色丁香婷婷综合影院| 国产精品久久久久久久久久妞妞| 欧美日韩理论| 国产精品porn| 国产精品一卡| 国产一区二区主播在线| 国产真实乱偷精品视频免| 国内精品久久久久影院优| 狠狠色狠狠色综合| 亚洲国产女人aaa毛片在线| 亚洲精品小视频在线观看| 日韩亚洲欧美精品| 日韩视频免费大全中文字幕| 99天天综合性| 亚洲欧美在线播放| 欧美一区二区三区喷汁尤物| 久久精品国产一区二区三| 欧美电影免费观看高清| 国产精品盗摄一区二区三区| 国产精品日韩专区| 国模精品一区二区三区色天香| 精品69视频一区二区三区| 亚洲精品久久在线| 亚洲专区一区| 美日韩精品免费| 欧美色播在线播放| 娇妻被交换粗又大又硬视频欧美| 在线看视频不卡| 亚洲天堂久久| 久久久久一区二区三区四区| 男男成人高潮片免费网站| 欧美日韩在线视频一区| 国产日韩欧美中文在线播放| 亚洲第一精品久久忘忧草社区| 亚洲乱亚洲高清| 午夜精品剧场| 欧美黄色小视频| 国内精品美女av在线播放| 亚洲免费观看在线观看| 午夜天堂精品久久久久 | 一色屋精品亚洲香蕉网站| 最近看过的日韩成人| 午夜在线一区| 欧美激情小视频| 国产日韩在线播放| 亚洲精品在线免费| 久久久欧美一区二区| 国产精品家教| 亚洲精品国产欧美| 久久精品一区四区| 国产精品亚洲一区| 99在线|亚洲一区二区| 久久久一区二区| 国产精品视频福利| 一本不卡影院| 欧美激情视频在线免费观看 欧美视频免费一 | 国产精品日韩欧美大师| 在线免费观看日韩欧美| 亚洲欧洲99久久| 欧美日韩伦理在线| 亚洲人成网站在线播| 鲁大师成人一区二区三区| 国产欧美一级| 午夜精品一区二区三区电影天堂 | 欧美在线观看一区| 欧美午夜精品久久久| 亚洲黄页视频免费观看| 久久久国产亚洲精品| 国产婷婷色一区二区三区在线| 亚洲天天影视| 欧美体内she精视频| 亚洲乱码国产乱码精品精可以看 | 久久久av毛片精品| 国产模特精品视频久久久久| 亚洲一区二区在线| 国产精品看片资源| 亚洲欧美日韩爽爽影院| 国产精品乱看| 欧美亚洲日本网站| 国产麻豆91精品| 久久精品免视看| 在线日韩日本国产亚洲| 麻豆精品视频在线| 亚洲伦理精品| 欧美日韩视频在线观看一区二区三区 | 国产在线播精品第三| 久久久www成人免费精品| 狠狠综合久久av一区二区老牛| 久久久久久久高潮| 亚洲青色在线| 欧美日韩小视频| 性欧美8khd高清极品| 激情久久影院| 欧美日韩成人在线| 亚洲欧美日韩一区二区在线| 国产日韩精品在线播放| 狼狼综合久久久久综合网| 亚洲精品免费网站| 国产精品一区久久久久| 麻豆精品91| 亚洲中字在线|