2010-10-18 3 views
2

Помимо того, что они, я не знаю ничего о регулярных выражениях ... :(регулярного выражения для создания поверочных меток с использованием нескольких шаблонов

У меня есть этот код в яваскрипте функции:

var foroFormatting = function (text) { 
    var newText = text; 
    var findreps = [ 
     { find: /^([^\-]+) \- /g, rep: '<span class="ui-selectmenu-item-header">$1</span>' }, 
     { find: /([^\|><]+) \| /g, rep: '<span class="ui-selectmenu-item-content">$1</span>' }, 
     { find: /([^\|><\(\)]+) (\()/g, rep: '<span class="ui-selectmenu-item-content">$1</span>$2' }, 
     { find: /([^\|><\(\)]+)$/g, rep: '<span class="ui-selectmenu-item-content">$1</span>' }, 
     { find: /(\([^\|><]+\))$/g, rep: '<span class="ui-selectmenu-item-footer">$1</span>' } 
    ]; 
    for (var i in findreps) { 
     newText = newText.replace(findreps[i].find, findreps[i].rep); 
    } 
    return newText; 
} 

Этот код ожидает строку, как этот

John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 (footer text) 

и разделить его на четыре элемента пролетных правильно?

Я хотел бы применить такое же форматирование к строке, которая немного отличается от той

John Doe - 78 West Main St Apt 3A | Bloomsburg, PA 12345 

Как я должен изменить регулярное выражение?

EDIT

Я пытаюсь использовать this plugin (третий пример) со строкой шахты, которая отличается от оригинала только в последней части

+0

Каков ваш желаемый результат? вы хотите иметь пустой ''? – mykhal

+0

, пожалуйста, взгляните на мое редактирование в конце вопроса – Lorenzo

ответ

1

Если все, что вы бросаете, равно (footer text), тогда будет работать одна и та же функция без последнего регулярного выражения.

var foroFormatting2 = function (text) { 
    var newText = text; 
    var findreps = [ 
     { find: /^([^\-]+) \- /g, rep: '<span class="ui-selectmenu-item-header">$1</span>' }, 
     { find: /([^\|><]+) \| /g, rep: '<span class="ui-selectmenu-item-content">$1</span>' }, 
     { find: /([^\|><\(\)]+)$/g, rep: '<span class="ui-selectmenu-item-content">$1</span>' } 
    ]; 
    for (var i in findreps) { 
     newText = newText.replace(findreps[i].find, findreps[i].rep); 
    } 
    return newText; 
} 

Я удалил части, которые захватили и отформатированных (footer text). Я предлагаю читать на regular expressions. Это отличный инструмент.

+0

Я пробовал использовать это, но не работает ... – Lorenzo

+0

Моя ошибка ... Работает! !! благодаря! – Lorenzo

+0

Нет проблем. Имейте в виду ответ ** mykhal **. Посмотрев на оригинальную функцию, это действительно может быть правдой. Однако результирующий набор '' может быть не таким, какой вы есть, т. Е. Класс 'footer' все еще появляется. –

0

Вы рассмотрели изменения формата входного сигнала, может быть, JSON? Это выглядит очень хрупким форматом разбора.

Что такое ожидаемый выход? Используйте требуемые промежутки

+0

, пожалуйста, взгляните на мое редактирование в конце вопроса – Lorenzo

1

вам не надо ничего менять, код отлично работает без текста колонтитула в круглых скобках

1

Ну, позвольте мне дать вам несколько советов, чтобы сделать это очень легко. Измените свой формат ввода.

Это массив строк в формате JSON.

var arr = ['John Doe', '78 West Main St Apt 3A', 'Bloomsburg, PA 12345', '(footer text)']; 
var outputStr = '<span class="ui-selectmenu-item-header">' + 
     //This line concats the array elements with this text inserted 
     // between each element 
     arr.join('</span><span class="ui-selectmenu-item-header">') + 
'</span>'; 
Смежные вопросы