JQuery извлечь слова из строки - PullRequest
2 голосов
/ 27 июня 2011

У меня простой вопрос.Используя jQuery, я хочу извлечь слова из строки в массив.Как мне это сделать?Любые примеры?

Например, если у меня есть строка, показанная ниже: я хочу получить только слова с префиксом '@'

var accts = "@userA @userB @userC   @userD invalidUserE @userF ";

Спасибо, KR

Ответы [ 6 ]

5 голосов
/ 27 июня 2011

Вам действительно не нужен jQuery, вы можете сделать это довольно просто с базовым JavaScript:

var accts = "@userA @userB @userC   @userD invalidUserE @userF ";
var split = accts.split(" ");
for(var i = 0; i < split.length; i++) {
    if(split[i].charAt(0) == "@") {
      //Got one
    } 
}

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

2 голосов
/ 27 июня 2011

совпадений = accts.match (/ (@ \ S +) / g)

2 голосов
/ 27 июня 2011

Так как вы запросили JQuery

var result = $.grep(accts.split(" "), function(a){ return /^@/.test(a) } )

Дает вам:

["@userA", "@userB", "@userC", "@userD", "@userF"]
1 голос
/ 27 июня 2011

Вы хотите использовать функцию Javascript split. Например:

var a = accts.split(" ");

После того, как в массиве есть слова, разделенные пробелами, выполните итерацию по массиву, чтобы выбрать те из них, которые начинаются с @, как вам требуется.

0 голосов
/ 17 апреля 2014

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

var accts = "a@userA @userB @userC   @userD invalidUserE @userF@userG ";

Я обновил приведенный выше коднадеюсь, что это поможет людям

Демо на скрипке: http://jsfiddle.net/abdulrauf6182012/3LBsC/

код:

Html

<div class="output"></div>

Jquery:

 $(document).ready(function() {


function getHasTagAry( msgTxt, finder ) {     
     var msgTxtAry = msgTxt.split(' ');
     var hash = []
     for(var i = 0; i < msgTxtAry.length; i++) {
         if( msgTxtAry[i].indexOf(finder) > -1 )
         hash.push( msgTxtAry[i].trim() )
     }
    msgTxtAry = hash.join('').split(finder).join('-tp-'+finder).split('-tp-');
    hash = [];
    for(var i = 0; i < msgTxtAry.length; i++) {
        if( msgTxtAry[i].trim() != '' ){
         hash.push( msgTxtAry[i].trim() )         
        }

     }
    return hash;
}    

     var msgTxt = 'hellow #ABDULRAUF #RUFI #HASHTAG #HASHTAGFINDER abc #GAME';
     var hash2 = getHasTagAry( msgTxt,'#' );     

     $('.output').append( 'hash tags in string='+hash2.length+'<br/>' );
     $('.output').append( hash2.join('<br/>') );

   $('.output').append( '<br/><br/><br/>');


     var msgTxt = 'Hi @ABDULRAUF @RUFI  @username abc @AA';
     var userNames = getHasTagAry( msgTxt ,'@');     
 $('.output').append( userNames.length+'user names in str('+msgTxt+')<br/><br/>' );
 $('.output').append( userNames.join('<br/>') );



});

Если кто-то может оптимизировать код, это было бы здорово :), у меня очень мало времени для этого

0 голосов
/ 27 июня 2011

Нет необходимости использовать jQuery, в этом случае это не поможет.Лучший способ сделать это - использовать регулярное выражение для идентификации допустимого пользователя, в данном случае это строка, начинающаяся с символа @.Этот код извлекает из вашей строки все строки, начинающиеся с символа @:

В отличие от предыдущих примеров, использующих разделение на символе @, он игнорирует все, что не начинается с @, и возвращает только то, что действительно безнужны дополнительные тесты.

var accts = "@userA @userB @userC   @userD invalidUserE @userF ";
var user = null;
var patt = /@\w+/g;
while(user=patt.exec(accts))
{
    alert(user);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...