2012-04-08 3 views
1

Как обнаружить, если строка содержит шаблон с JavaScript:обнаружить, если строка содержит шаблон

1. input="[Lorem]foo"; 
2. input="[ ]"; 
3. input="[ipsum]foo"; 
4. input="[dolor]foo1"; 
5. input="[sit ]foo2"; 
6. input="[ amet]foo3"; 
7. input="amet]foo3"; 
... 

Скрипт должен обрабатывать input таким образом:

1. string1='Lorem'; string2="foo"; 
2. do nothing; 
3. string1='ipsum'; string2="foo"; 
4. string1='dolor'; string2="foo1"; 
5. do nothing; 
6. do nothing; 
7. do nothing; 
... 

Это будет частью сценария ...

input = "[asd]qwe"; 
input2 = "qwe"; 

processit(input); 
processit(input2); 

function processit(e){ 

    if(..???..){ 
     alert(string1); 
     alert(string2); 
    } 
    else { 
     return false; 
    } 

} 

Спасибо за ваше время.


EDIT: Решение должно быть кросс-браузер

IE7 +

Firefox 3.6 +

Chrome 7+ ...

+0

Вид, который трудно понять, что кажется проблемой! Если вам нужна информация о регулярном выражении - [MDN RegEx] (https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions) и [сайт, посвященный RegEx] (http: //www.regular-expressions. info/javascript.html) – Bakudan

ответ

4

jsbin code

Это регулярное выражение должно достичь результата: /\[([a-zA-Z0-9]+)\]([a-zA-Z0-9]+)/

+1

Те конструкции '[^ \ s]' не должны быть там. Вы уже говорите, что это соответствует буквенно-цифровым символам, и ничего больше с '[a-zA-Z0-9] +'; нет необходимости говорить об этом * не *, чтобы соответствовать пробелу. Кроме того, вам требуется, чтобы первая строка имела длину не менее трех символов, и вы отбрасываете последний символ, потому что второй '[^ \ s]' находится за пределами группы захвата. –

+0

@AlanMoore: исправлено регулярное выражение, спасибо – dhinesh

+0

'\ w' будет работать вместо каждого' [a-zA-Z0-9] '- он эквивалентен' [a-zA-Z0-9_] '. Кроме того, поскольку вы хотите совместить только целую строку, регулярное выражение должно начинаться с '^' и заканчиваться '$'. –

1

Вы можете воспользоваться как split() работает с группами захвата.

var pieces = str.split(/\[(\w+?)\]/); 

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

pieces.filter(function(piece) { return piece; }); 

jsFiddle.

+0

Это НЕ работает в Internet Explorer. 'Сведения об ошибке веб-страницы Сообщение: объект не поддерживает это свойство или метод. Любые предложения? – enloz

+0

@enloz Вы можете [подгонять] (http://blog.stevenlevithan.com/archives/cross-browser-split) 'split()', чтобы заставить его работать в IE. – alex

+1

Я бы предположил, что 'pieces.filter' является частью, не поддерживаемой IE. –

0

Фактические требования неясны, так что я угадал. Ниже перечислены только непустые строки буквенно-числовой-плюс-подчеркивания внутри и после скобок и пытается совместить целую строку, а не несколько вхождений в более длинную строку.

var input = "[Lorem]foo"; 
var string1, string2; 
var result = /^\[(\w+)\](\w+)$/i.exec(input); 
if (result) { 
    string1 = result[1]; 
    string2 = result[2]; 
} 
alert(string1 + ", " + string2); 
Смежные вопросы