Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Любой ID в URL (https://javascript.ru/forum/misc/66419-lyubojj-id-v-url.html)

lkombatl 14.12.2016 13:54

Любой ID в URL
 
Здравствуйте. Хочу написать userscript который запускался на любой странице сайта с любым ID.


var addr = location.pathname; 
    if (addr == '/страница/id/*' ) {
        alert('p');}


Пытался гуглить, но не знаю как гуглу корректно составить запрос.

Coriolan161 14.12.2016 14:08

lkombatl,
регулярка

Dilettante_Pro 14.12.2016 14:20

lkombatl,
Цитата:

Сообщение от lkombatl
на любой странице сайта с любым ID.

Значит, и проверять ничего не нужно.
alert('p');

lkombatl 14.12.2016 16:36

Цитата:

Сообщение от Dilettante_Pro (Сообщение 437987)
lkombatl,

Значит, и проверять ничего не нужно.
alert('p');

Не на любой странице, а на странице на которой указан ID, и ID может быть любой. Вот так я хотел выразится.

Т.е. если путь сайт/страница/ то он не должен работать.
Если путь сайт/страница/id то все равно не должен работать.
А если сайт/страница/id/*какое то число* то скрипт запускается.

lkombatl 14.12.2016 16:38

Цитата:

Сообщение от Coriolan161 (Сообщение 437984)
lkombatl,
регулярка

Сразу пошёл сюда https://learn.javascript.ru/regular-...ons-javascript вроде все проштудировал и не нашёл нужной информации.
Регулярка как понял нежна для поиска и извлечения данных, но мне сам ID не нужен а нужно запускать скрипт при лбом наборе цифр.

Dilettante_Pro 14.12.2016 17:08

var arr = ['abcd/bcda','abcd/bcda/id','abcd/bcda/id/','abcd/bcda/id/100','abcd/bcda/id/1abc'];
var regex = new RegExp('/id/[0-9]{1,}(?![a-z])','i');

for (var i = 0; i < arr.length; i++) {
  if (regex.test(arr[i])) { alert(arr[i] + " - Выполнять"); }
  else { alert(arr[i] + " - Не выполнять"); }
}

Malleys 14.12.2016 20:30

простой маршрутизатор

var route = {
    _routes: [], // здесь будут храниться функции, которые вызываются в зависимости от адреса

    add: function(url, action) {
        this._routes.push({
            url: url,
            action: action
        });
    },

    run: function() {
        this._routes.forEach(function(pattern) {
            if(location.href.match(pattern.url)) {
                pattern.action();
            }
        });
    }
}

// пример
// выполниться всегда
route.add('.*', function() {
    alert('Hello there!');
});

route.add('products.html', function() {
    alert("this won't be executed :(");
});

// если сайт/страница/id/*какое то число* то скрипт запускается.
route.add('сайт/страница/id/\\d+', function(){
    alert('This is using a regex!');
});

route.run();

lkombatl 15.12.2016 15:37

Цитата:

Сообщение от Dilettante_Pro (Сообщение 438022)
var arr = ['abcd/bcda','abcd/bcda/id','abcd/bcda/id/','abcd/bcda/id/100','abcd/bcda/id/1abc'];
var regex = new RegExp('/id/[0-9]{1,}(?![a-z])','i');

for (var i = 0; i < arr.length; i++) {
  if (regex.test(arr[i])) { alert(arr[i] + " - Выполнять"); }
  else { alert(arr[i] + " - Не выполнять"); }
}

Спасибо большое, ваш вариант подошёл.
Я то думал что попроще будет, на подобии знака '*' выделяющего любые данные, но чуть разобравшись и регулярные выражения не такими страшными кажутся.

+ в карму)

lkombatl 15.12.2016 15:42

Цитата:

Сообщение от Malleys
простой маршрутизатор

Хороший код. Разбирать я его конечно не буду, ибо он меня немного пугает)

но + в карму за старания)


Часовой пояс GMT +3, время: 03:10.