2010-10-05 5 views
2

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

Записан В: Дэйв - example.com

Любые мысли о наилучшем способе сделать это с регулярным выражением в JS?

ответ

2

Я не знаю, как у вас есть вещи точно, настройка, но это должно работать:

// This is our RegEx pattern. 
var user_pattern = /Logged In: ([a-z]+) - example\.com/i 

// This is the logged in string we'll be matching the pattern against 
var logged_in_string = "Logged In: Dave - example.com" 

// Now we attempt the actual match. If successful, user[1] will be the user's name. 
var user = logged_in_string.match(user_pattern) 

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

Надеюсь, это поможет!

+0

Это сработало отлично! Спасибо друг. – dave

-1

раскол в толстой кишке, разделить на пространствах, и взять второй элемент в этом массиве, как:

var thestring = "Logged In: Dave - example.com"; 
thestring = thestring.split(":"); 
thestring = thestring[1].split(" "); 
thename = thestring[1] 

Или, если имена могут содержать пробелы:

var thestring = "Logged In: Dave - example.com"; 
    thestring = thestring.split(":"); 
    thestring = thestring[1].split("-"); 
    var x = thestring[0].length; 
    if (x > 4) { 
    var thename = thestring[0].replace(" ", ""); 
    } 
    else { 
    thestring = thestring[0].split(" "); 
    thestring = thestring.split(" "); 
    thename = thestring[1] + " " + thestring[3]; 
    } 
+0

Что бы сломалось, если имя содержит пробелы. – cHao

2

Вы надеваете» Мне действительно нужно регулярное выражение. Вы можете взять a .slice() of строку, получив позицию : и -using .indexOf().

Пример:http://jsfiddle.net/mkUzv/1/

var str = "Logged In: Dave - example.com"; 

var name = str.slice(str.indexOf(': ') + 2, str.indexOf(' -')); 

EDIT: Как отмечает @cHao, + 2 должны были использованы для того, чтобы устранить пробел после :. Исправлена.

+1

Будет ли это +2, а не +1? Пространство не должно быть частью названия ... – cHao

+0

@cHao - Очень хорошая точка. Я обновлю. Благодарю. : o) – user113716

+1

. Для аргумента преимущество использования регулярного выражения может заключаться в том, что он позволяет «логику» того, как встроенный текст будет отделяться от встроенного кода Javascript. Таким образом, если строка «Logged In» по какой-то причине изменяется, все, что вам нужно сделать, это исправить регулярное выражение, и используемый им код может (вероятно) оставаться неизменным. Однако я согласен с тем, что это может быть излишним. – Pointy

Смежные вопросы