Как использовать регулярное выражение в .match jQuery () - PullRequest
0 голосов
/ 23 марта 2020

Я пытался заставить пару похожих регулярных выражений работать в скрипте jQuery, использующем функцию .match ().

Старая версия RegEx, которую я использовал, работала, но с тех пор «обновить его», чтобы сделать его более строгим, теперь я не могу заставить его работать успешно:

Я использую этот RegEx:

var termString = queryString.match('/(?<=' + queryTermIdentifier + ').*?(?=\+)+/g'); 

Но он выдает эту ошибку:

Uncaught SyntaxError: Invalid regular expression: //(?<=term=).*?(?=+)+/g/: Nothing to repeat
    at String.match (<anonymous>)
    at ready-functions.js?200323021240:1361
    at ready-functions.js?200323021240:1575
    at ready-functions.js?200323021240:1624

Где в строках 1361 используется RegEx. Строка 1575 является концом функции, которая ее использует. Последний инцидент в 1624 году - это конец документа и самопроизвольная функция jQuery.

Я использую пару из них, и все они очень похожи:

var termString = queryString.match('/(?<=' + queryTermIdentifier + ').*?(?=\+)+/g');
var categoryString = queryString.match('/(?<=' + queryCategoryIdentifier + ').*?(?=\+)+/g');
var tagString = queryString.match('/(?<=' + queryTagIdentifier + ').*?(?=$)+/g');

Они все ли варианты в оглядке назад?? = = для строки до экземпляра '+' для первых двух или конца строки в последней.

Когда вывод консоли два '/' я пытался удалить это, и это сводит его к одному '/'. Я также попытался избежать этого, и это также работает.

Не уверен, как действовать, поскольку это работает в инструменте RegExr, который я использовал для его записи: regexr.com/50trq

Edit (Second Попытка)

var queryString = window.location.search;

var queryTermString = '';
var queryCategoryString = '';
var queryTagString = '';

var queryTermIdentifier = 'term=';
var queryCategoryIdentifier = 'category=';
var queryTagIdentifier = 'tag=';

if (queryString.indexOf(queryTermIdentifier)) {
    console.log(queryTermIdentifier + 'was found');
    var myReg = new RegExp('(?<=' + queryTermIdentifier + ').*?(?=\+)', 'g');
    var termStringArray = myReg.exec(queryString);
    if (termStringArray.length) {
        queryTermString = termStringArray.index;
    }
}

Я пытаюсь использовать этот метод, но все равно получаю ту же ошибку.

Редактировать 2

(Поменяйте местами термин для фразы, добавьте дополнительные '\' to '+', как и '\ +').

Я удалил термин «термин», так как я думаю, что он зарезервирован для некоторой функциональности WordPress, поэтому заменил его на «фразу» .

Я также добавил дополнительный '\' к использованию '+' в соответствии с запросом.

Вот обновленный соответствующий фрагмент:

var queryString = window.location.search;
console.log(queryString);
// This returns '?phrase=hello+category=world+tag=youokay'

if (queryString.length) {
    var queryTermString = '';

    var queryTermIdentifier = 'phrase=';

    if (queryString.indexOf(queryTermIdentifier) > 0) {
        console.log(queryTermIdentifier + 'was found in query string');

        var myTermReg = new RegExp('/(?<=' + queryTermIdentifier + ').*?(?=&)', 'g');
        var termStringArray = myTermReg.exec(queryString);
        console.log(termStringArray);
        // THIS IS ALWAYS NULL???
        if (termStringArray.length > 0) {
            queryTermString = termStringArray.index;
        }
    }
}

Это кажется чтобы позволить коду выполнить дополнительную строку или две. Однако теперь консоль возвращает

Uncaught TypeError: Cannot read property 'length' of null

Ссылка на строку:

if (termStringArray.length) {

Я не могу понять, почему это так.

...