2013-09-06 4 views
0

я делаю что-то вдоль этих линий в какой-то код, который я пишуDownsides & Альтернативы - метод JS цепочки

txt = txt.replaceAll('\n','').replaceAll('<b>','[bold]').replaceAll('</b>','[/bold]') 
.replaceAll('<strong>','[bold]').replaceAll('</strong>','[/bold]').... 

где replaceAll является расширение String.prototype. Это прекрасно работает, но мне интересно -

Есть ли какие-либо недостатки, чтобы связать слишком много методов таким образом? Возможно, было бы лучше использовать регулярное выражение, которое выполняет эту работу в «oner»? Если да, то как выглядит регулярное выражение? (Я не очень хорош с регулярными выражениями)

+0

Я вполне уверен, что это совершенно нормально и пытается собрать регулярное выражение, будут обрабатывать все эти случаи, будут как запутанными, так и менее эффективными. –

ответ

1

Это прекрасно. Альтернатива регулярного выражения также довольно прямолинейна, вы в основном просто должны использовать чередование и не забудьте избежать того, что нужно ускользнуть: Live Example | Live Source

var replacements = { 
    '\n':  '', 
    '<b>':  '[bold]' 
    '</b>':  '[/bold]', 
    '<strong>': '[bold]', 
    '</strong>': '[/bold]' 
    // ... 
}; 
txt = txt.replace(/\n|<b>|<\/b>|<strong>|<\/strong>/g, function(m) { 
    return m in replacements ? replacements[m] : m; 
}); 
+0

Спасибо! @Michael Geary. Я принимаю T.J. Ответ Краудера из-за регулярного выражения. – DroidOS

1

Это нормально, чтобы связать их вместе. Но не ставьте их на одну линию. Это гораздо легче читать, если вы переформатировать код:

txt = txt 
    .replaceAll('\n', '') 
    .replaceAll('<b>', '[bold]') 
    .replaceAll('</b>', '[/bold]') 
    .replaceAll('<strong>', '[bold]') 
    .replaceAll('</strong>', '[/bold]'); 

Этот же стиль полезен в JQuery цепи:

$('<div>Test</div>') 
    .css({ fontSize: '16px' }) 
    .attr({ title: 'Test' }) 
    .appendTo('body'); 
Смежные вопросы