Я пытался заставить пару похожих регулярных выражений работать в скрипте 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) {
Я не могу понять, почему это так.