javascript
2017-08-31 10 views 1 likes 
1

私は文字列のセットがあります。検索ワード

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"; 

は私がplayer-で始まる単語を含むすべての文字列に対してtrueまたはfalseを返したいが。つまり、別の単語の一部ではなく、で始まります。したがって、上記の

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); 
} 

しかし、これを考慮していないがマッチした単語の先頭でなければなりません。

+0

これをグーグルでサイトの内容:https://developer.mozilla.org/fr/docs// Web/JavaScript/Reference/Objets_globaux/String/startsWith – OrcusZ

+2

このように: 's.split(" ").find(function(str){return str.startsWith(" user- ");});'? – Patrick2607

+0

これまでに行ったことを示すことができますか?あなたの立ち往生場所? –

答えて

-1

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 ") };  
+0

ありがとうございますが、' str = "hellowelcome hiのためにはうまくいきません。" welcome "のためにtrueを返しますが、それはウェルカムワードの開始ではありません。 – TheRealPapa

+0

だから、単語が "player"で始まっている場合、または "player"が存在する場合にのみtrueを返すようにしてください何も追加せずに単独で? – Atlas

+0

これは、trueまたはfalseではなく、数値を返します。さらに、 'text-class not-user-1 color-class'がテストに合格します。 –

0

よう

は、私はあなたがuser-で始まる意味を推測します。

txt.split(' ').some((elem) => elem.startsWith('user-')); 

あなたは

1

ここ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))

+0

あなたはマスターです... –

+0

Pffffのみ​​の場合。私はそうだった。 –

0

だけ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));

0

私の代わりに$(要素).ATTR( 'クラス')の(文字列の配列です)element.classListがで動作するようにあなたに助言します。そのクラス属性の 'user-'文字列の位置を処理する代わりに、配列をループすることができます。

また、私はあなたのgetUserClass関数で混乱しています。これはブール値を返しますが、それはhasUserClassで呼び出され、文字列が必要です。

function getUserClass(element) 
{ 
    if (! element) { 
     return false; 
    } 

    var classes = element.classList; 

    for (var i=0;i<classes.length;i++) { 
     if (classes[i].indexOf('user-') == 0) { 
      return classes[i]; 
     } 
    } 

    return false; 
} 

あなたadditionnal質問について:だからここ

があなたのgetUserClass機能の別のバージョンでさらにを、どのように私はクラスの文字列からユーザー-X値を得るのですか?

function getUserIdFromClass(className) { 
    if (!className) { 
     return false; 
    } 

    return className.replace("user-", ""); 
} 

ここで私は、このHTMLから得るものです:

<div class="user-1 color-class">1</div> 
<div class="text-class user-1 color-class">2</div> 
<div class="text-class not-user-1 color-class">3</div> 
<div class="not-user-1 color-class">4</div> 
<div class="not-user-1 user-1 color-class">5</div> 

JSコンソール:

<div class=​"text-class user-1 color-class">1</div>​ 
user-1 
1 
<div class=​"text-class not-user-1 color-class">2</div>​ 
false 
false 
<div class=​"not-user-1 color-class">3</div>​ 
false 
false 
<div class=​"not-user-1 user-1 color-class">4</div>​ 
user-1 
1 
関連する問題