Регулярное выражение для игнорирования строки в JavaScript

1

Я создаю запрос для отправки на поиск, одно из полей ввода - это фильтр для "ИЛИ". Мне нужно заменить пробелы на + OR +.. только в том случае, если пробел встречается вне цитируемого текста. Итак, это логика:

"Счастливые дни" + OR + "Лодка для любви"

У меня есть рабочий код, который будет делать это здесь:

var filter2=$('[name=filter2]').val();
var str2 = jQuery.trim(filter2);
var filter2d = str2.replace(/" "/g, "\"+OR+\"");

Это работает только в том случае, если текст содержит цитаты. Я хотел бы также иметь возможность сделать это:

fonzy + OR + "Счастливые дни" + OR + "Лодка для любви"

Любая помощь приветствуется

Теги:

3 ответа

2

Вы тоже можете сделать это.

'"abc def" ghi "klmno pqr"'.match(/"[^"]*"|[^\s]+/g).join("+OR+");
1

Гвоздь:

var input = '"abc def" ghi "klmno pqr" xyz';
input.replace (/("[^"]*"|\w+)(\s+|$)/g,'$1+OR+').slice (0,-4) ===
'"abc def"+OR+ghi+OR+"klmno pqr"+OR+xyz'

Это предполагает, что ваши цитируемые строки не содержат символов кавычек.

  • 0
    Черт, пропустил этот дополнительный + ИЛИ + в последней строке
  • 1
    Я бы использовал [^ "] вместо \ w, если fon $ y допустим.
Показать ещё 1 комментарий
0

Это должно сделать это...

function replaceWhiteSpace(str)
{
  insideAQuote = false;
  len = str.length
  for (i=0; i < len; i++)
  {
    if (str.charAt(i) == '"')
    {
      insideAQuote = !insideAQuote;
    }
    else if (str.charAt(i) == ' ' && !insideAQuote)
    {
      str = str.substr(0, i) + "+OR+" + str.substr(i+1);
    }
  }
  alert(str);
}
  • 0
    Оглядываясь назад, я заметил, что ваш заголовок говорит, что вы ищете регулярное выражение ... Ой, простите. Это будет работать независимо, и я уверен, что это тоже быстрее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню