Как сопоставить одинаковые строки в Javascript? - PullRequest
0 голосов
/ 07 января 2019

Возьмите эти два URL:

const url1 = '/user/{username}/edit'
const url2 = '/user/harry/edit'

Есть ли решение, чтобы сопоставить эти два URL-адреса и вернуть true, если они похожи?

Я пробовал следующее и должно быть худшее решение:

const url1 = '/user/{username}/edit'
const url2 = '/user/harry/edit'

const split1 = url1.split('/')
const split2 = url2.split('/')

let matchCount = 0
let notMatchedCount = 0

split1.map(x => {
    if(x === split2[x]) {
        matchCount++
    } else {
        notMatchedCount++
    }
})

if(matchCount > notMatchedCount) {
    console.log('Match Found')
} else {
    console.log('Match not found')
}

EDIT

Решением было использование PathToRegExp пакета! Спасибо @ChiragRavindra!

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вы можете использовать регулярное выражение для проверки URL

  • \/user\/ соответствие /user/
  • \w+ совпадение с 1 или более символами слова ([a-zA-Z0-9_]+)
  • \/edit совпадение /edit

const url1 = '/user/{username}/edit';
const urlCorrect = '/user/harry/edit';
const urlWrong = '/users/harry/edit';

//generate a regex string by escaping the slashes and changing word between curly brackets with {\w+} 
var regexString = url1.replace(/\{\w+\}/g, '\\w+').replace(/\//g, '\\/');
console.log('generating regex: ' + regexString);
var regex = new RegExp(regexString);

//test using the generated regex
console.log(regex.test(urlCorrect));
console.log(regex.test(urlWrong));
0 голосов
/ 07 января 2019

Я бы посоветовал вам заглянуть внутрь этой библиотеки. NPM - Библиотека сходства строк

Библиотека просто возвращает вероятность сравнения двух строк, если они похожи. Тогда вам остается только установить порог, исходя из того, сколько процентов вы предполагаете, что они одинаковы.

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