Есть ли регулярное выражение для разделения строки: "#CAT - мяу мяу #DOG - кора лая #FOX - что это говорит?" на #XXX, сохраняя #XXX [в Google Scripts]? - PullRequest
1 голос
/ 11 января 2020

Я работаю над проектом в Google Scripts и пытаюсь получить регулярное выражение, которое позволило бы мне разбить строку:

"#CAT - meow meow #DOG - bark bark #FOX - what does it say?"

на #XXX, сохраняя #XXX в строке.

Я придумал:

(?=#[A-Z]{3}.+?(?=#[A-Z]{3}))

https://regex101.com/r/e4V0VW/2, но это не работает.

С моим регулярным выражением я получаю:

var str = "#CAT - meow meow #DOG - bark bark #FOX - what does it say?";

console.log(str.split(/(?=#[A-Z]{3}.+?(?=#[A-Z]{3}))/g));

["#CAT - meow meow ", "#DOG - bark bark #FOX - what does it say?"]
0: "#CAT - meow meow "
1: "#DOG - bark bark #FOX - what does it say?"

В консоли браузера, и я предполагаю, что это будет работать аналогично в Google Scripts.

Моя цель - получить массив из 3 строк:

["#CAT - meow meow", "#DOG - bark bark", "#FOX - what does it say?"]

У кого-нибудь есть идеи, как это решить? :)

Ответы [ 2 ]

1 голос
/ 12 января 2020

Вы можете разделить с помощью /(?=#[A-Z]{3})/ регулярное выражение:

var str = "#CAT - meow meow #DOG - bark bark #FOX - what does it say?";
console.log(str.split(/(?=#[A-Z]{3})/))

Регулярное выражение (?=#[A-Z]{3}) содержит один положительный прогноз соответствует местоположению в строке, за которым сразу следует #, а затем три заглавных буквы ASCII буквы.

0 голосов
/ 11 января 2020

Вы также можете сделать это следующим образом:

function xsplit() {
  var s="#CAT - meow meow #DOG - bark bark #FOX - what does it say?";
  var idxA=[];
  var fromidx=0;
  do{
    var idx=s.indexOf('#',fromidx);
    if(idx>-1) {
      idxA.push(idx);
      fromidx=idx+1;
    }
  }while(idx>-1);
  var sA=[];
  for(var i=0;i<idxA.length-1;i++) {
    sA.push(s.slice(idxA[i],idxA[i+1]));
  }
  sA.push(s.slice(idxA[idxA.length-1]));
  Logger.log(sA);
  return sA;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...