Birden çok madde işareti içeren bir metin belgesini ayrıştırmaya çalışıyorum.Düz metinden yeni satırları içeren mermi ayırma
Bekarım satır karakterlerini sahip bir mermi noktasını ayrıştırmak istiyorum ama 2 veya daha fazla satır karakterlerinin bulunduğunda kırmak istiyoruz.
for example :
-----------------------------------
* bullet
text on new line
more text
this should be a separate block
-----------------------------------
when passed through the function, this should capture :
-----------------------------------
-> start
bullet
text on new line
more text
<- end capture
this should be a seperate block
-----------------------------------
Ben de bugüne kadar, ben yinelemeli html/sırasız mediawiki'sh listeleri sipariş ayrıştırmak bir javascript fonksiyonu yazdım da budur. Tek fark, blokların, 2 satırlık molalar ve 1 seri molaların mediawiki yolu ile ortaya çıkmasıdır. /(?:(?:(?:^|\n)[*#].*)+)/g maç için -
http://jsfiddle.net/epinapala/L18y7zyx/7/
function parseLists(str)
{
//How can I capture bulleted lines with less than or equal to "1" newline character?
return str.replace(/(?:(?:(?:^|\n)[\*#].*)+)/g, function (match) {
var listType = match.match(/(^|\n)#/) ? 'ol' : 'ul';
match = match.replace(/(^|\n)[\*#][ ]{0,1}/g, "$1");
match = parseLists(match);
return '<'
+ listType + '><li>'
+ match.replace(/^\n/, '').split(/\n/).join('</li><li>')
+ '</li></' + listType
+ '>';
});
}
Sorun ilk regex ile olduğunu düşünüyorum bullts, bu regex, bir satırsonu karakteri bulunduğunda kesilir, "1" satır karakterine eşit veya daha az ile satırları nasıl yakalayabilirim?
İçlerinde satırsonu ile mermi ayrıştırmak istiyorum ve 2 veya daha fazla yeni satır karakterleri olmaması durumunda bir mermi kırmak istiyoruz. Mermi içeriği izledi.
[Düzenle] - Bir desen gibi aşağıda varsa
function parseLists2(str)
{
return str.replace(/(?:(?:(?:^|\n)[\*#](?:.+\n)+.*))/g, function(match){
match = match.replace(/\n(?![#\*])/g," ");
//alert(match);
var listType = match.match(/(^|\s)#/) ? 'ol' : 'ul';
match = match.replace(/(^|\s)[\*#][ ]{0,1}/g, "$1");
match = parseLists2(match);
return '<'
+ listType + '><li>'
+ match.replace(/^\s/, '')
.split(/\n/).join('</li><li>')
+ '</li></' + listType
+ '>';
});
}
altına Karşılıklı tek sorun gibi bazı değişiklikler ve benim fonksiyonun güncel sürümünü yapabildi görünür:
bir çift çizgi arası ile ayrılmış süreceul madde
* some ul item
* some ul item
# some ol item
bir blok olarak ayrılmış varlık değildir.
Teşekkürler!
herhangi büyük test durumları var mı? –
Test metnini büyütmek için tekrarlanan aynı işaretleme. Ayıklamaya çalıştığım her şey, iki veya daha fazla yeni satır karakteriyle ayrılmadıkça, her bir madde işareti noktasıdır. Sorun şu ki, bir satırsonu karakteri bile tamamen yeni bir metin bloğu olarak ayrıştırılıyor. –
bir şey özyinelemeli regex ile yanlış şüpheli, bu yüzden bu örnekle geldi: http://pastebin.com/RkGj3h4v –