3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
好的,讓我們從thingy開(kāi)始。很好,但從技術(shù)上講,無(wú)需在單個(gè)括號(hào)中加上一個(gè)符號(hào)[5]
[1-9] | [1-4][0-9] | 5[0-7]
(為清楚起見(jiàn),請(qǐng)?jiān)诖颂幒拖路绞褂每崭瘢?/p>
對(duì)于第一部分,使用a | ab
時(shí),像這樣的更改讀起來(lái)更好ab?
,即“ a,然后可選地是b`”。這給了我們
< \/ ?
現(xiàn)在,您要查找的“ and”(或“ and then”)運(yùn)算符在正則表達(dá)式語(yǔ)言中非常簡(jiǎn)單-沒(méi)什么。也就是說(shuō),a and then b
就是ab
。
但是,如果我們像這樣簡(jiǎn)單地將兩個(gè)部分組合在一起
a x | y | z
這將是一個(gè)錯(cuò)誤,因?yàn)?code>|優(yōu)先級(jí)較低,因此應(yīng)解釋為
ax | y | z
這不是我們想要的。因此,我們需要將數(shù)字事物放入parens中,由于下面將要解釋的原因,這些parens也必須是不可捕獲的:
<\/? (?: [1-9] | [1-4][0-9] | 5[0-7] )
這與我們的定界符匹配,但是我們還需要介于兩者之間的所有內(nèi)容,因此我們將繼續(xù)進(jìn)行split
輸入。split
通常返回與分隔符不匹配的字符串?dāng)?shù)組:
"a,b,c".split(/,/) => a b c
如果我們也想包含定界符,則必須將其放置在捕獲組中:
"a,b,c".split(/(,)/) => a , b , c
因此,我們必須再次將所有內(nèi)容包裝在括號(hào)中:
( <\/? (?: [1-9] | [1-4][0-9] | 5[0-7] ) )
這就是原因?:
-我們希望捕獲全部?jī)?nèi)容,而不是數(shù)量部分。
將所有內(nèi)容放在一起似乎可以解決問(wèn)題:
s = "This is a<21>test</21>." console.log(s.split(/(<\/?(?:[1-9]|[1-4][0-9]|5[0-7])>)/))

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
你差不多了。這真的很簡(jiǎn)單,就像用連接替換'or'或用串聯(lián)|替換一樣and。然后,通過(guò)?:在每個(gè)組的開(kāi)頭添加以下內(nèi)容,確保您的組不匹配:
(?:<|<\/)(?:[1-9]|[1-4][0-9]|[5][0-7])>
MDN對(duì)split和正則表達(dá)式的交互進(jìn)行了解釋。但是,簡(jiǎn)短的示例解釋是:
'hi_joe'.split('_'); // ['hi', 'joe']
'hi_joe'.split(/_/); // ['hi', 'joe']
'hi_joe'.split(/(_)/); // ['hi', '_', 'joe']
'hi_joe'.split(/(?:_)/); // ['hi', 'joe']
根據(jù)評(píng)論更新,如果您還希望在結(jié)果數(shù)組中使用<##>,則將正則表達(dá)式包裝在另一組括號(hào)中。
((?:<|<\/)(?:[1-9]|[1-4][0-9]|[5][0-7])>)
添加回答
舉報(bào)