2015-07-22 5 views
0

Я отправил это сообщение Extract String RegEx Question не так давно.
Я хочу улучшить шаблон выражения больше.Обнаружение пробелов регулярных выражений Javascript

До сих пор это хорошо работает:

<script> 
    // extract the inc/funcs.asp from the variable. 
    var text = '<!-- #include file="inc/funcs.asp" -->'; 
    var pattern = /file="([^"]+)/i 
    var result = (text.match(pattern) || ['', ''])[1]; 
    console.log(result); // returns: inc/funcs.asp 
</script> 

Я сейчас тестирует Пробельные нюансы. Образец, который я применяю, это:/file = "([^"] +)/i Я хотел бы добавить еще к этому шаблону.

Например:

var pattern = /#include file="([^"]+)/i 

И это работает, если нет больше места между #include и файл.

Так что я изменил шаблон для этого:

var pattern = /#include(\s+)file="([^"]+)/i 

Полный скрипт:

<script> 
    var text = '<!-- #Include  File="inc/funcs.asp" -->'; 
    var pattern = /#include(\s+)file="([^"]+)/i 
    var result = (text.match(pattern) || ['', ''])[1]; 
    var count = result.length; 

    if(count > 0){ 
    console.log(result); 
    } 
</script> 

Переменная счетчик больше, чем 0, и запускает console.log. Но переменная результат пуст.

Что мне не хватает?

ответ

1

Удалить группу захвата - () от \s+ от regex. В противном случае он всегда будет возвращать пробелы в массиве result.

var pattern = /#include\s+file="([^"]+)/i; 

Demo

var text = '<!-- #Include  File="inc/funcs.asp" -->'; 
 
var pattern = /#include\s+file="([^"]+)/i; 
 
var result = (text.match(pattern) || ['', ''])[1]; 
 

 
if (result.length > 0) { 
 
    alert(result); 
 
}

+0

Это было его! Теперь мне нужно будет понять группы захвата. – coffeemonitor

0

Это потому, что вы добавили группу, а элемент с индексом 1 в массив, возвращаемый match, - это эта группа (полная пробелов).

Изменить

var pattern = /#include(\s+)file="([^"]+)/i 

в

var pattern = /#include\s+file="([^"]+)/i 

Альтернативой было бы использовать не запоминающийся группу ((?:\s+)), но вам не нужна группа вообще.

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