2013-08-22 7 views
1

CodeНе удается получить значение с помощью Regex

if(x.substr(0,4)=='init') { 
    output += 'Initialised<br>';   
    var rgx = /^\[typ-$\]/i; 
    if (rgx.test(x))output+='Type given<br>'; 
    else output+='No type: '+x+'<br>'; 

} 
container.append(output); 

То, что я пытаюсь сделать

Я имитируя терминал командной строки для веб-сайта. Одна команда: init, которая содержит параметр type. Параметр задается типизации:

init [typ-Foo] 

Я пытаюсь затем получить значение параметра type (в данном случае, Foo).

Что происходит

Я не в состоянии получить значение вообще. Он возвращает No Type: init [typ-Foo], что и возвращает функция, когда значение не найдено. Я еще не играл с Regex, поэтому я уверен, что моя команда неверна, но я не могу заставить ее работать!

+1

Регулярное выражение ожидает строку в _begin_ с кронштейном (из-за 'carat'), в то время как ваш строки начинаются с «init». –

+0

@RobI - Я достал '^' и до сих пор не повезло. Строка, которую я пытаюсь восстановить (или проверить на данный момент), - это 'Foo', которая начинается с' [typ-'и заканчивается' ''. – Ben

ответ

3
var result = /\[typ-([^\]]+)]/.exec( userInput ); 
if (result){ 
console.log("type: " + result[1]); 
} 
else { 
// no type 
} 

Если result является null, то нет никакого типа. Если это не так, то тип в result[1]

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

+0

Спасибо, это работает отлично. – Ben

+0

Чистое решение - захват и все - хотя, поскольку исходное решение вопроса испытало «init», я задаюсь вопросом, будет ли это частью требований? Это решение примет «finalize [typ-Foo]» как действительный ввод. –

+0

Действительно. Код здесь предназначен только для замены части, которая получает тип. Остальная часть кода OP выглядит нормально. – ColBeseder

0

Попробуйте что-то больше, как это:

var rgx = /^init \[typ-(.*)\]$/i; 

m = x.match(rgx); 

if (m != null) { 
    output += 'Initialised<br>'; 
    output+='Type given<br>'; 
    output+='Argument: ' + m[1]; // note this is the "Foo" value 
} 
else { 
    output+='No type: '+x+'<br>'; 
} 
container.append(output); 
Смежные вопросы