Regex удалить заменить все пробелы и запятые со знаком плюс - PullRequest
1 голос
/ 21 марта 2019

У меня такой запрос

2258, Hampton Street, Columbia, SC, USA

Мне нужно заменить все пробелы и запятые на плюс, поэтому я делаю это:

query = query.replace(/,? /g, '+');

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

2258, Hampton Street, Columbia, SC, USA
2258, Hampton Street, Columbia, SC,, USA, 
2258, Hampton Street, Columbia, SC, USA ,
 ,2258, Hampton Street, Columbia, SC, USA
, 2258, Hampton Street, Columbia, SC, USA
   2258, Hampton Street, Columbia, SC, USA
,,2258, Hampton   Street, Columbia, SC, USA
2258, Hampton Street,,,, Columbia, SC, USA 
2258, Hampton Street Columbia, SC, USA,
2258, Hampton Street  ,, Columbia, SC, USA

И все они должны быть:

2258+haptom+street+columbia+sc+usa

Ответы [ 3 ]

2 голосов
/ 21 марта 2019

Вы можете использовать

var rx = /^[,\s]+|[,\s]+$|([,\s]+)/g;
s = s.replace(rx, function(_,$1) { return $1 ? '+' : ''; })

Шаблон соответствует

  • ^[,\s]+ - 1+ запятых или пробелов в начале строки
  • | - или
  • [,\s]+$ - 1+ запятых или пробельных символов в конце строки
  • | - или
  • ([,\s]+) - 1+ запятых или пробельных символов, включенных в группу 1

Если группа 1 соответствует замене, это +, в противном случае замена представляет собой пустую строку (удаление пробелов / запятых в начале / конце).

См. Демонстрацию JS:

var strs = ['2258, Hampton Street, Columbia, SC, USA', '2258, Hampton Street, Columbia, SC,, USA, ', '2258, Hampton Street, Columbia, SC, USA ,', ' ,2258, Hampton Street, Columbia, SC, USA', ', 2258, Hampton Street, Columbia, SC, USA', '   2258, Hampton Street, Columbia, SC, USA', ',,2258, Hampton   Street, Columbia, SC, USA', '2258, Hampton Street,,,, Columbia, SC, USA ', '2258, Hampton Street Columbia, SC, USA,', '2258, Hampton Street  ,, Columbia, SC, USA'];
var rx = /^[,\s]+|[,\s]+$|([,\s]+)/g;
for (var s of strs) {
  console.log(s.replace(rx, function(_,$1) {
    return $1 ? '+' : '';
  }))
}
1 голос
/ 21 марта 2019

Попробуйте это

q.replace(/^[, ]+|[, ]+$/g, '').replace(/[, ]+/g, '+')

Пример:

queries = [
  '2258, Hampton Street, Columbia, SC, USA',
  '2258, Hampton Street, Columbia, SC,, USA, ',
  '2258, Hampton Street, Columbia, SC, USA ,',
  ' ,2258, Hampton Street, Columbia, SC, USA',
  ', 2258, Hampton Street, Columbia, SC, USA',
  '   2258, Hampton Street, Columbia, SC, USA',
  ',,2258, Hampton   Street, Columbia, SC, USA',
  '2258, Hampton Street,,,, Columbia, SC, USA ',
  '2258, Hampton Street Columbia, SC, USA,',
  '2258, Hampton Street  ,, Columbia, SC, USA'
];

queries.forEach(q => {
  console.log(q.replace(/^[, ]+|[, ]+$/g, '').replace(/[, ]+/g, '+'));
});
0 голосов
/ 21 марта 2019

Проверьте ниже пример двух шагов

var inputString = `2258, Hampton Street, Columbia, SC, USA
2258, Hampton Street, Columbia, SC,, USA, 
2258, Hampton Street, Columbia, SC, USA ,
 ,2258, Hampton Street, Columbia, SC, USA
, 2258, Hampton Street, Columbia, SC, USA
   2258, Hampton Street, Columbia, SC, USA
,,2258, Hampton   Street, Columbia, SC, USA
2258, Hampton Street,,,, Columbia, SC, USA 
2258, Hampton Street Columbia, SC, USA,
2258, Hampton Street  ,, Columbia, SC, USA`;

var regex = /^[\s*,]+|[\s*,]$|(\s*,*)$|(,*\s*)$|[ ]{2}/gm;

// Clean string first remove space or , in start and end and remove duplicated inside statements
inputString = inputString.replace(regex, ''); 

// Replace any , or space one or more with +
console.log(inputString.replace(/[, ]+/gm, '+'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...