Поиск подстроки с регулярным выражением Javascript - PullRequest
0 голосов
/ 26 мая 2020

Как мне найти указанный c URL-адрес для определенных c тегов, если у меня есть эти categoryIdList и scripts, возможно ли получить указанный c URL?

const categoryIdList = ["#travel", "#lifestyle", "#fnb", "#gadget_entertainment", "#dailyneeds", "#others_promo"]

const scripts = `$(document).ready(function(){

        $("#travel").click(function(){                           
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=1");
        });

        $("#lifestyle").click(function(){                                
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=2");
        });

        $("#fnb").click(function(){                              
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=3");
        });

        $("#gadget_entertainment").click(function(){                             
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=4");
        });

        $("#dailyneeds").click(function(){                               
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=5");
        });

        $("#others_promo").click(function(){                             
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=6");
        });

        $("#kartukredit").click(function(){                              
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=1");
        });

        $("#simpanan").click(function(){                                 
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=2");
        });

        $("#others").click(function(){                           
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=3");
        });

        $("#ebanking").click(function(){                                 
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=4");
        });
});`

Результат, который я хочу, похож на

{
  "#travel": "ajax.promolainnya.php?product=0&subcat=1",
  "#lifestyle": "ajax.promolainnya.php?product=0&subcat=2",
  // etc
}

Как я могу получить этот результат с помощью регулярного выражения? Или любым способом из javascript

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

С оговоркой, что это исключительно подход fr agile и основан на отображении 1: 1 #id в uri в методе .load , регулярном выражении, которое поможет вам out полагается на группы захвата и может выглядеть примерно так:

/\$\(\"#.*\"\)\.click|\.load\(\".*\"\);/g

См. разбивку того, что он делает здесь: https://regex101.com/r/hD0zR5/7

Вы можете использовать это регулярное выражение в скрипте для преобразования набора совпадений в массив, где каждые 2 элемента массива являются парой ключ / значение.

Если вы можете гарантировать это будет правдой (каждые 2 элемента массива представляют собой пару ключ / значение), вы можете l oop через массив и создать объект, который вы ищете.

Поскольку у вас уже есть categoryIdList вы при желании можно использовать эти значения для проверки ключей при создании объекта.

const scripts = `$(document).ready(function(){

        $("#travel").click(function(){                           
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=1");
        });

        $("#lifestyle").click(function(){                                
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=2");
        });

        $("#fnb").click(function(){                              
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=3");
        });

        $("#gadget_entertainment").click(function(){                             
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=4");
        });

        $("#dailyneeds").click(function(){                               
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=5");
        });

        $("#others_promo").click(function(){                             
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=0&subcat=6");
        });

        $("#kartukredit").click(function(){                              
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=1");
        });

        $("#simpanan").click(function(){                                 
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=2");
        });

        $("#others").click(function(){                           
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=3");
        });

        $("#ebanking").click(function(){                                 
                  $("#contentpromolain2").load("ajax.promolainnya.php?product=4");
        });
});`


const urls = {}
const matches = [...scripts.matchAll(/\$\(\"(#.*)\"\)\.click|\.load\(\"(.*)\"\);/g)]

for (let i = 0;i < matches.length;i += 2) {
  urls[matches[i][1]] = matches[i + 1][2]
}

console.log(urls)
1 голос
/ 26 мая 2020

Я думаю, что вы обычно ищете это Regex: "(.*?)" (https://regex101.com/r/jY8NBp/1)

Это даст вам каждый бит между кавычками, затем вы можете игнорировать средний при создании вашего объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...