2016-02-24 3 views
1
var wordsString="car/home/pencil,Joe/Hugh/Jack/Chris"; 
var word='home'; 
var pattern1=/^/+word; 
var pattern2=/,/+word; 
var pattern3 =/\//+word; 

var matched = wordsString.match(pattern1+ /|/ +pattern2+ /|/ + pattern3 + /g/); 

Я хочу совместить результаты со словамиString с использованием pattern1, pattern2, pattern3. Мне нужно совпадение в соответствии с шаблоном1 или pattern2 или pattern3. Но я получаю нуль. В чем проблема?совпадение нескольких регулярных выражений с использованием javascript

+1

Вы не можете конкатенировать регулярное выражение – Amit

+0

Не пытайтесь использовать значение переменной до тех пор, пока оно не будет назначено. И регулярные литералы не работают так. – Oriol

+0

преобразует вашу строку в объект RegExp http://stackoverflow.com/questions/4589587/javascript-regular-expression-string-to-regex-object – phenxd

ответ

0

Вы не можете конкатенировать литералы регулярного выражения. Тем не менее, вы можете объединять строки и использовать их, чтобы построить объект регулярного выражения:

var wordsString = "car/home/pencil,Joe/Hugh/Jack/Chris", 
    word = 'home', 
    escapedWord = RegExp.escape(word), 
    patterns = ['^' + escapedWord, ',' + escapedWord, '/' + escapedWord], 
    regex = new RegExp(patterns.join('|'), 'g'), 
    matched = wordsString.match(regex); 

RegExp.escape необходим в случае word содержит символы со специальным значением в регулярных выражениях. Он был предложен в качестве стандарта, но еще не принят, поэтому вы должны определить его вручную, используя код от here.

+0

спасибо спасибо спасибо :) – lowdegeneration

+0

Мне также нужна картина, чтобы поймать «автомобиль/дом /» или Джо/Хью/... Я имею в виду, мне также нужно поймать 2 «/» с двумя словами. Как я могу определить его как «/», повторенный 2 раза, а затем получить слова вместе. – lowdegeneration

+0

'word = 'Joe/Hugh''? – Oriol

0

Вы не можете связать Regex's в JavaScript так, как вы это делаете, но вы можете заключить строки, содержащие одно регулярное выражение. Не убегайте от символа трубы, так как он соответствует тому или иному.

var one = "test" 
var two = "this" 

var regex = new RegExp("^(first|" + one + "|" + two + ")") 

var match = regex.test("this"); // matches 
var noMatch = regex.test("no match"); // does not match 
Смежные вопросы