我有这个字符串
string = "<p>para1</p><p>para2</p><p>para3</p>"
我想分开para2文本,以便我得到这个
["<p>para1</p>", "<p>para3</p>"]
问题是有时para2可能不会被包装在p标签中(并且p外部和内部可能有可选空格)。我以为这会做到这一点:
string.split(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/)
但是,我明白了:
["<p>para1</p>", "<p>", "</p>", "<p>para3</p>"]
它不会将开始和结束p标记拉入匹配模式 - 它们应该作为拆分的一部分被删除。默认情况下Ruby的正则表达式是贪婪的,所以我认为它们会被拉入。而且,如果我做一个gsub而不是分裂,这似乎得到了证实:
string.gsub(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/, "XXX")
=> "<p>para1</p>XXX<p>para3</p>"
他们被拉入并摆脱了这里,但不是分裂。任何人的想法?
谢谢,最大
答案 0 :(得分:8)
将捕获组(…)
替换为非捕获组(?:…)
:
/\s*(?:<p>)?\s*para2\s*(?:<\/p>)?\s*/