我有这个字符串
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 而不是 split,这似乎得到了证实:
string.gsub(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/, "XXX")
=> "<p>para1</p>XXX<p>para3</p>"
They are在这里被拉进去又被摆脱,但不是在分裂时。有人有什么想法吗?
谢谢,马克斯
替换您的捕获组(…)
与非捕获组(?:…)
:
/\s*(?:<p>)?\s*para2\s*(?:<\/p>)?\s*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)