javascript
2017-08-31 112 views 1 likes 
1

我有一組字符串:字符串查找單詞的Javascript

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

但這並不考慮是必須匹配單詞的開始。

+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嗨有「它會返回真正的'歡迎',但它不是歡迎詞的開始。 – TheRealPapa

+0

所以,如果一個單詞以「玩家」開頭或只有「玩家」出現,您才希望它返回true沒有任何補充? – Atlas

+0

這將返回數字,不是true或false。此外,'文本級非用戶1色級'將通過測試。 –

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

我勸你element.classList工作(這是一個字符串數組),而不是$(元素).attr( '類')。它將允許你遍歷數組,而不必處理該類屬性中'user-'字符串的位置。

另外,我很困惑你的getUserClass函數。它返回一個布爾值,但它在hasUserClass中調用,並且需要一個字符串。

因此,這裏是你的getUserClass功能的另一個版本:

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

關於你提到的其它附加的問題:此外,我怎麼從String類用戶-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 
相關問題