Próbuję wyodrębnić łańcuchy między wystąpieniem określonej postaci w większym ciągu.

Na przykład:

Początkowy ciąg to:

var str = "http://www.google.com?hello?kitty?test";

Chcę być w stanie przechowywać wszystkie podciągi między znakami zapytania jako ich zmienne, takie jak "hello", "kitty" i "test".

W jaki sposób skierowałem podstępy między różnymi indeksami określonej postaci za pomocą wyrażeń JavaScript lub regularnych?

0
JWill 4 czerwiec 2018, 23:29

6 odpowiedzi

Najlepsza odpowiedź

Możesz Split na {{ X0}} i użyj plasterka przekazujący 1 jako wartość parametru.

Dałoby ci tablicę z twoimi wartościami. Jeśli chcesz utworzyć oddzielne zmienne, na przykład otrzymasz wartość według indeksu var1 = parts[0]

var str = "http://www.google.com?hello?kitty?test";
var parts = str.split('?').slice(1);
console.log(parts);
var var1 = parts[0],
  var2 = parts[1],
  var3 = parts[2];
console.log(var1);
console.log(var2);
console.log(var3);
0
The fourth bird 5 czerwiec 2018, 10:42

Możesz wziąć podłączenie począwszy od pierwszego znaku zapytania, a następnie podzielone przez znak zapytania

const str = "http://www.google.com?hello?kitty?test";
const matches = str.substring(str.indexOf('?') + 1).split(/\?/g);
console.log(matches);
0
baao 4 czerwiec 2018, 21:08

Szybka Uwaga: URL byłby nieprawidłowy. Znak zapytania ? oznacza początek ciągu zapytań i pary kluczy / wartości są ogólnie dostarczane w formularzu key=value i rozdzielone z ampersand &.

Powiedziany, jeśli to nie problem, dlaczego nie split na znak zapytania, aby uzyskać tablicę wartości?

var split_values = str.split('?');
//result: [ 'http://www.google.com', 'hello', 'kitty', 'test' ]

Następnie możesz po prostu złapać indywidualne wartości z tablicy, pomijając pierwszy element.

0
B. Fleming 4 czerwiec 2018, 20:36

Wierzę, że to zrobi:

var components = "http://www.google.com?hello?kitty?test".split("?");
components.slice(1-components.length) // Returns: [ "hello", "kitty", "test" ]
0
user9894236user9894236 4 czerwiec 2018, 20:37

Za pomocą wyrażeń regularnych

var reg = /\?([^\?]+)/g;
var s = "http://www.google.com?hello?kitty?test";

var results = null;

while( results = reg.exec(s) ){
  console.log(results[1]);
}
0
Stakvino 4 czerwiec 2018, 20:56

Ogólne sprawy jest użycie REGEXP:

var regex1 = new RegExp(/\?.*?(?=\?|$)/,'g'); regex1.lastIndex=0;
str.match(regex1)

Należy zauważyć, że doprowadzi to również do wiodącego ? w każdej klauzuli (brak regexp w Javascript).

Alternatywnie można użyć lepkiej flagi i uruchomić go w pętli:

var regex1 = new RegExp(/.*?\?(.*?)(?=\?|$)/,'y'); regex1.lastIndex=0;
while(str.match(regex1)) {...}
0
Gabi Lee 4 czerwiec 2018, 21:00