3 回答

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

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