Ruby与正则表达式分裂 - 正则表达式没有做我想要的

Max*_*ams 3 ruby regex

我有这个字符串

string = "<p>para1</p><p>para2</p><p>para3</p>"
Run Code Online (Sandbox Code Playgroud)

我想分开para2文本,以便我得到这个

["<p>para1</p>", "<p>para3</p>"]
Run Code Online (Sandbox Code Playgroud)

问题是有时para2可能没有包装在p标签中(并且p外部和内部可能有可选空格).我以为这样做会:

string.split(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/)
Run Code Online (Sandbox Code Playgroud)

但是,我明白了:

["<p>para1</p>", "<p>", "</p>", "<p>para3</p>"]
Run Code Online (Sandbox Code Playgroud)

它不会将开始和结束p标记拉入匹配模式 - 它们应该作为拆分的一部分被删除.默认情况下Ruby的正则表达式是贪婪的,所以我认为它们会被拉入.而且,如果我做一个gsub而不是分裂,这似乎得到了证实:

string.gsub(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/, "XXX")
=> "<p>para1</p>XXX<p>para3</p>"
Run Code Online (Sandbox Code Playgroud)

他们拉进和摆脱了这里,但不是在分裂.任何人的想法?

谢谢,最大

Gum*_*mbo 8

(…)用非捕获组替换捕获组(?:…):

/\s*(?:<p>)?\s*para2\s*(?:<\/p>)?\s*/
Run Code Online (Sandbox Code Playgroud)