JavaScript соответствует нескольким значениям в разделенных запятыми строках - PullRequest
1 голос
/ 03 июня 2019

Привет У меня есть строка с набором чисел

var matches = '128,126,125,124,123,122,118,117,116,115,99,98,97';

, и я хотел бы проверить с другой подстроки, если значения совпадают в пределах строки, предоставленной выше

var numbers = '126,125';

Я пробовал регулярное выражение

if( $(this).attr('data-ids').match(new RegExp("(?:^|,)"+matches+"(?:,|$)"))){console.log('found'); 
}else {console.log('not found')}

Но регулярное выражение работает для одного значения, а не для нескольких значений

var numbers = '125';

Я хочу, чтобы это работало с одиночными и множественными совпадениями.

Ответы [ 5 ]

1 голос
/ 03 июня 2019

Вам необходимо переключить заказ в match. Я предполагаю, что numbers переменная имеет значение, возвращаемое $(this).attr('data-ids'). Вам нужно проверить, существует ли $(this).attr('data-ids') внутри matches, а не наоборот. Измените его на:

if (matches.match(new RegExp("(?:^|,)" + $(this).attr('data-ids') + "(?:,|$)"))) {
  console.log('found');
} else {
  console.log('not found')
}

Кроме того, если вы просто хотите проверить, существуют ли подстроки, вы можете использовать RegExp#test вместо

1 голос
/ 03 июня 2019

Если порядок незначителен (numbers может быть 125,126 o4 126,125, и вы хотите, чтобы оба соответствовали вашему примеру), вам нужно разбить эти строки на массивы, а затем проверить, соответствуют ли записи вnumbers все в matches:

const match = numbers.split(",").every(n => matchesArray.includes(n));

Live Пример:

function test(matches, numbers, expected) {
    const matchesArray = matches.split(",");
    const match = numbers.split(",").every(n => matchesArray.includes(n));
    console.log(`matches: ${matches}`);
    console.log(`numbers: ${numbers}`);
    console.log(`match:   ${match}`);
    console.log(!match === !expected ? "=> Good" : "=> ERROR");
}

test(
    '128,126,125,124,123,122,118,117,116,115,99,98,97',
    '126,125',
    true
);

test(
    '128,126,125,124,123,122,118,117,116,115,99,98,97',
    '125,126', // <== I changed the order here
    true
);

test(
    '128,126,125,124,123,122,118,117,116,115,99,98,97',
    '119,126',
    false
);
.as-console-wrapper {
    max-height: 100% !important;
}

Если порядок значительный, проще всего будет поставить вокруг них запятые и проверить подстроку:

const match = ("," + matches + ",").includes("," + numbers + ",");

Live Example:

function test(matches, numbers, expected) {
    const match = ("," + matches + ",").includes("," + numbers + ",");
    console.log(`matches: ${matches}`);
    console.log(`numbers: ${numbers}`);
    console.log(`match:   ${match}`);
    console.log(!match === !expected ? "=> Good" : "=> ERROR");
}

test(
    '128,126,125,124,123,122,118,117,116,115,99,98,97',
    '126,125',
    true
);

test(
    '128,126,125,124,123,122,118,117,116,115,99,98,97',
    '125,126', // <== I changed the order here
    false      // <== Shouldn't work
);
.as-console-wrapper {
    max-height: 100% !important;
}
1 голос
/ 03 июня 2019

Если заказ не имеет значения, вы можете взять набор и проверить каждый требуемый товар.

var matches = '128,126,125,124,123,122,118,117,116,115,99,98,97',
    numbers = '126,125',
    has = numbers.split(',').every(Set.prototype.has, new Set(matches.split(',')));

console.log(has);
0 голосов
/ 03 июня 2019

Попробуйте

(','+matches+',').search(','+numbers+',')>=0;

var matches = '128,126,125,124,123,122,118,117,116,115,99,98,97',
    numbers = '126,125';
    
let r= (','+matches+',').search(','+numbers+',')>=0;

console.log(r);
0 голосов
/ 03 июня 2019

Вы можете includes с every:

var matches = '128,126,125,124,123,122,118,117,116,115,99,98,97';

var numbers = '126,125';

var t_m = matches.split(',')
var t_n = numbers.split(',')

t_n.every(num => t_m.includes(num)) ? console.log(true) : console.log(false)

Если порядок имеет значение, вы можете найти индекс первого числа и проверить, следует ли каждое последующее число:

var matches = '128,126,125,124,123,122,118,117,116,115,99,98,97';

var numbers = '126,125';

var t_m = matches.split(',')
var t_n = numbers.split(',')

var index = t_m.indexOf(t_n[0])
t_n.every((num, i) => num === t_m[i + index]) ? console.log(true) : console.log(false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...