Как получить разделители, разделяющие мою строку на Javascript? - PullRequest
0 голосов
/ 19 апреля 2020

Допустим, у меня есть строка, подобная следующей:

var str = "hello=world&universe";

И мой оператор замены регулярного выражения выглядит следующим образом:

str.replace(/([&=])/g, ' ');

Как получить разделители, разделяющие мою строку из вышеприведенного выражения regex replace?

Я бы хотел, чтобы результат был примерно таким:

var strings    = ['hello', 'world', 'universe'];
var delimiters = ['=', '&'];

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Вы можете разделить группу, а затем разделить части.

var str = "hello=world&universe",
    [words, delimiters] = str
        .split(/([&=])/)
        .reduce((r, s, i) => {
            r[i % 2].push(s);
            return r;    
        }, [[], []]);

console.log(words);
console.log(delimiters);
0 голосов
/ 19 апреля 2020

Вот один из способов использования String.matchAll

const str = "hello=world&universe";
const re = /([&=])/g;
const matches = [];
let pos = 0;
const delimiters = [...str.matchAll(re)].map(m => {
  const [match, capture] = m;
  matches.push(str.substring(pos, m.index));
  pos = m.index + match.length;
  return match;  
});
matches.push(str.substring(pos));

console.log('matches:', matches.join(', '));
console.log('delimiters:', delimiters.join(', '));

Но только к вашему сведению. Отправленная вами строка выглядит как строка поиска URL. Возможно, вы захотите использовать URLSearchParams для его анализа, так как существуют крайние случаи, если вы попытаетесь разделить и '&' и '=' одновременно. См. Как получить значения строки запроса в JavaScript?

...