我有以下的JavaScript(在<P>
S中的空間是不換行):如何通過正則表達式的匹配在JavaScript中進行替換?
var html = '...<li>sub 2</li></ol></li></ol>\n\
<p> i. subsub 1</p>\n\
<p> ii. subsub 2</p>\n\
<ol start="2"> \n\
<ol start="3"> \n\
<li>sub 3</li></ol>...';
$(function() {
var nestedListFixer = /(?:<\/li><\/ol>\s*)+(?:<p>(?:&(?:nbsp|\#0*160|x0*A0);)+(?:\s[ivxlcdm]+\.)(?:&(?:nbsp|\#0*160|x0*A0);)+\s(.*?)<\/p>\s*)+(?:<ol(?:\sstyle=\"[^\"]+\")?\sstart=\"[^\"]+\">\s*)+/i;
html = html.replace(nestedListFixer, function($0, $1){
var lis = ""
$.each($1, function() {
lis += "<li>" + this + "</li>\n";
});
alert("<ol>\n" + lis + "</ol></li>");
return "<ol>\n" + lis + "</ol></li>";
});
});
的alert()
的輸出:
<ol>
<li>s</li>
<li>u</li>
<li>b</li>
<li>s</li>
<li>u</li>
<li>b</li>
<li> </li>
<li>2</li>
</ol></li>
這裏就是我希望這將是:
<ol>
<li>subsub 1</li>
<li>subsub 2</li>
</ol></li>
我如何正確遍歷的$1
每場比賽?
更新:簡化模式和匹配例如:
var text = '1ab2cb3cd4ab5cb6cd7';
$(function() {
var textFixer = /(?:a)(?:b(.*?)c)+(?:d)/i;
text = text.replace(textFixer, function($0, $1){
var numbers = "";
$.each($1, function() {
numbers += this;
});
alert(numbers);
return numbers;
});
alert(text);
});
// actual text:
// 13467
// desired text:
// 1234567
你能不能簡化代碼,正則表達式和標記,使人們可以更容易地理解你的問題,所以幫你嗎? (不是一個修辭問題) – 2009-08-11 18:07:09
我已經添加了一個更簡單的版本,這是否更有意義? – travis 2009-08-11 18:44:19
等一下,「你不能......」你是說我已經簡化了太多嗎? – travis 2009-08-11 18:46:00