У меня есть набор строк:
s1 = 'user-1 color-class';
s2 = 'text-class user-1 color-class";
s3 = 'text-class not-user-1 color-class";
s4 = 'not-user-1 color-class";
s5 = 'not-user-1 user-1 color-class";
Я хочу вернуть true или false для всех строк, содержащих слово, начинающееся с player-
. То есть, не как часть другого слова, а с самого начала.
Итак, для вышеуказанного
s1 = 'user-1 color-class'; <-- TRUE
s2 = 'text-class user-1 color-class"; <-- TRUE
s3 = 'text-class not-user-1 color-class"; <-- FALSE
s4 = 'not-user-1 color-class"; <-- FALSE
s5 = 'not-user-1 user-1 color-class"; <-- TRUE
Так, например:
if (hasUserClass(string)) { <-- boolean
Кроме того, как мне получить значение user-X
из строки класса?
userClass = getUserClass(string); <-- 'user-3'
Спасибо
Это то, что я сделал до сих пор:
function getUserClass(element)
{
if (! element) {
return false;
}
var classes = $(element).attr('class');
if (classes.search('user-') == -1) {
return false;
}
return classes.match(/player\-\d+/gi)[0];
}
function userHasClass(element)
{
if (! element) {
return false;
}
var userClass = getUserClass(element);
return (userClass == active_user.class);
}
Но это не учитывает, должно быть, начало совпадения слова.
Здесь имеется один вкладыш ES6.
s1 = 'user-1 color-class'; //<-- TRUE
s2 = 'text-class user-1 color-class'; //<-- TRUE
s3 = 'text-class not-user-1 color-class'; //<-- FALSE
s4 = 'not-user-1 color-class'; //<-- FALSE
s5 = 'not-user-1 user-1 color-class'; //<-- TRUE
const myTest = words => words.split(" ").some( str => str.startsWith("user-") )
console.log(myTest(s1), myTest(s2) ,myTest(s3), myTest(s4), myTest(s5))
Думаю, вы имели в виду, начиная с user-
.
txt.split(' ').some((elem) => elem.startsWith('user-'));
даст вам то, что вам нужно
Просто используйте indexOf
. Но почему бы не передать active_user.class
напрямую?
var s1 = 'user-1 color-class';
var s2 = 'text-class user-1 color-class';
var s3 = 'text-class not-user-1 color-class';
var s4 = 'not-user-1 color-class';
var s5 = 'not-user-1 user-1 color-class';
var test1 = 'user-';
var test2 = 'user-1'; // effectively active_user.class
var test3 = 'user-2';
function check (pWhat, pAgainst) {
var w = ' ' + pWhat;
var a = ' ' + pAgainst;
return w.indexOf (a) >= 0;
}
console.log("aginst: " + test1);
console.log(s1 + " -> " + check(s1, test1));
console.log(s2 + " -> " + check(s2, test1));
console.log(s3 + " -> " + check(s3, test1));
console.log(s4 + " -> " + check(s4, test1));
console.log(s5 + " -> " + check(s5, test1));
console.log("aginst: " + test2);
console.log(s1 + " -> " + check(s1, test2));
console.log(s2 + " -> " + check(s2, test2));
console.log(s3 + " -> " + check(s3, test2));
console.log(s4 + " -> " + check(s4, test2));
console.log(s5 + " -> " + check(s5, test2));
console.log("aginst: " + test3);
console.log(s1 + " -> " + check(s1, test3));
console.log(s2 + " -> " + check(s2, test3));
console.log(s3 + " -> " + check(s3, test3));
console.log(s4 + " -> " + check(s4, test3));
console.log(s5 + " -> " + check(s5, test3));
https://www.w3schools.com/jsref/jsref_indexof.asp
Взгляните на это.
если вы используете
var str = "Hello world, welcome to the universe.";
var n = str.indexOf("welcome");
var m = str.indexOf("itDoesntExist");
console.log(n) // prints 13
console.log(m) // prints -1 since it doesnt exist
позже вы можете использовать с ним инструкцию if
.
лайк
if(m === -1) { console.log("it doesnt exist ") };
str = "hellowelcome hi there" it will return true for
welcome`, но это не начало слова приветствия.
s.split(" ").find(function(str) { return str.startsWith("user-"); });
:s.split(" ").find(function(str) { return str.startsWith("user-"); });
?