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])>)
添加回答
举报