我想你其實想積極前瞻。這真是不壞:
/^([^<]+)(?=<p)/
你只是想確保無論發生什麼事之後<
是p
,但你不希望實際消耗<p
,讓你用的預計。
例子:
> var re = /^([^<]+)(?=<p)/g;
> 'foo<p>bar</p>'.replace(re, '<p>$1</p>');
"<p>foo</p><p>bar</p>"
> 'foo <b>bold</b><p>bar</p>'.replace(re, '<p>$1</p>')
"foo <b>bold</b><p>bar</p>"
對不起,是不是在我原來的帖子很清楚:我的期望是,「富大膽」也一點會得到包裹在一個新的p
標籤,這並沒有發生。
此外,每次不時地輸入沒有p
標籤(只是普通的foo
),而且還應該映射到<p>foo</p>
。
我發現得到這個工作最簡單的方法是使用2個獨立的正則表達式,/^(.+?(?=<p))/
和/^([^<]+)/
。
> var re1 = /^(.+?(?=<p))/g,
re2 = /^([^<]+)/g,
s = '<p>$1</p>';
> 'foo<p>bar</p>'.replace(re1, s).replace(re2, s);
"<p>foo</p><p>bar</p>"
> 'foo'.replace(re1, s).replace(re2, s);
"<p>foo</p>"
> 'foo <b>bold</b><p>bar</p>'.replace(re1, s).replace(re2, s);
"<p>foo <b>bold</b></p><p>bar</p>"
有可能通過合併re1
和re2
寫單,相當於正則表達式:
/^(.+?(?=<p)|[^<]+)/
> var re3 = /^(.+?(?=<p)|[^<]+)/g,
s = '<p>$1</p>';
> 'foo<p>bar</p>'.replace(re3, s)
"<p>foo</p><p>bar</p>"
> 'foo'.replace(re3, s)
"<p>foo</p>"
> 'foo <b>bold</b><p>bar</p>'.replace(re3, s)
"<p>foo <b>bold</b></p><p>bar</p>"
+1只是爲了最後一句。 – 2011-06-15 03:16:30