2012-02-29 2 views
0

Я хотел бы регулярное выражение JavaScript, которое может соответствовать строке либо в начале другой строки, либо после дефиса в строке.JavaScript регулярное выражение в соответствии с переносными словами?

Например, «milne» и «lee» и «lees» должны соответствовать «Lees-Milne».

Это мой код до сих пор:

var name = "Lees-Milne"; 
var text = "lee"; 

// I don't know what 'text' is ahead of time, so 
// best to use RegExp constructor. 
var re = RegExp("^" + text | "-" + text, "i"); 

alert(re.exec(name.toLowerCase())); 

Однако это возвращает нуль. Что я делаю не так?

+0

вы имели в виду процитировать строку, например: 'вар Re = RegExp ("^" + текст +«| - "+ текст," i ");'? – andrewmu

+0

Нет - спасибо, что указали это! Кажется, чтобы решить проблему, хотя мне все равно хотелось бы получить отзывы о том, выглядит ли общее регулярное выражение разумным. – Richard

+0

Я думаю, что исправление выглядит нормально. Я не могу придумать более простой способ сделать это. – andrewmu

ответ

1

Вы также можете использовать:

var re = RegExp("(?:^|-)" + text, "i"); 

Не забудьте, чтобы избежать регулярных выражений метасимволы в text, если это не является выражением его собственной. не

JavaScript имеет встроенного в функции для этого, но вы можете использовать:

function quotemeta(str){ 
    return str.replace(/[.+*?|\\^$(){}\[\]-]/g, '\\$&'); 
} 
Смежные вопросы