Может, так и было задумано разработчиками JavaScript, но я выявил некоторую особенность при использовании модификатора g в функции exec объекта RegExp. При указании данного модификатора должен осуществляться глобальный поиск всех совпадений, но на практике ищется только первое.
Например, в данном примере паттерн совпадает с подстроками 'abc', 'abcc' и 'abccc', а на практике возвращает только первое совпадение 'abc'. Переменные vSecondSame и vThirdSame будут неопределенны.
vArr = /abc+/g.exec("abc abcc abccc");
vFirstSame = vArr[0];
vSecondSame = vArr[1];
vThirdSame = vArr[2];
При использовании аналогичного по своей специфике метода match объекта String, модификатор g работает как положено. Т.е. в следующем примере, переменная vFirstSame равна 'abc', vSecondSame будет содержать 'abcc' и vThirdSame соответственно 'abccc'.
vArr = "abc abcc abccc".match(/abc+/g);
vFirstSame = vArr[0];
vSecondSame = vArr[1];
vThirdSame = vArr[2];
Oracle 10g и выше поддерживает регулярные выражения. В частности функция REGEXP_LIKE. Я не проверял насколько быстрее двухстороннего LIKE, работает регулярное выражение в Oracle, но приведу пример, когда выигрыш в производительности в десятки раз.
Надо было сделать запрос, где не обойтись без пяти двухсторонних LIKE:
select *
from t_table
where name like '%subname1%'
and name like '%subname2%'
and name like '%subname3%'
and name like '%subname4%'
and name like '%subname5%'
Используя REGEXP_LIKE, можно получить элегантный код работающий намного быстрее:
select *
from t_table
where REGEXP_LIKE(name,'subname1|subname2|subname3|subname4|subname5')