JavaScript

Вопрос по JavaScript!

Есть ли способ выяснить, содержит ли строка ИЛИ один определённый символ, ИЛИ второй, ИЛИ третий и т.д.?
Знаю только запись по типу "if (str.includes('+') || str.includes('-') || str.includes('*') || str.includes('/'))", но мне очень не нравится, что приходится постоянно переписывать одну и ту же строчку, поэтому нужно что-то вроде "str. ... ('+' || '-' || '*' || '/')". Подскажите плз метод, способный реализовать что-то подобное
Sieras M
Sieras M
249
let str = "kj+ko-n/de*";
let re1 = new RegExp("[+-/*]" , 'g' );
let re2 = /[+-/*]/g;

alert( str.search( re1 ) )

alert( str.search( re2 ) )
ХИ
Хусан Иресметов
16 208
Лучший ответ
Ilya Zag Чтоб определить, есть ли регулярка в строке, ключ g не нужен. Он нужен, чтоб найти все вхождения.
Читай про регулярные выражения
/[-+*/]/.test('ab+cde')
Ilya Zag
Ilya Zag
58 065
"Есть ли способ выяснить, содержит ли строка ИЛИ один определённый символ, ИЛИ второй, ИЛИ третий и т. д.?"

Эта та вещь, которая меня вымораживала, что нет короткого действия для последовательности одного и того же. Я сделал небольшой набросок (который работал лишь от части), а многоуважаемый Elepsis Eclipse воплотил это следующим образом:

function isif(arr, test_type, test_fn)
{
var BOOL = ({ "||": true, "&&": false })[test_type];
for (var i = 0; i < arr.length; i++)
{
var result = test_fn(arr[i], i, arr);
if (result === BOOL) return BOOL;
}
return! BOOL;
}

Теперь вы можете записать это так, было:
if (str.includes('+') || str.includes('-') || str.includes('*') || str.includes('/'))

Стало:
if (isif(['+', '-', '*', '/'], "||", (e) => str.includes(e)))

Как работает:
1) В качестве первого аргумента принимает массив значений, к которым нужно применить одно и тоже действие.
2) Принимает "||" либо "&&", зависит от того, хотите вы чтобы все значения дали true или хотя бы одно из них.
3) Принимает функцию с производимым действием над каждым элементом массива.

Из-за особенности самого алгоритма, это работает намного быстрее, чем если вы тоже самое напишите нативным способом.
BH
Brave Hearts1
3 695
Sieras M спасибо