Если вы действительно не хотите повторять x в регулярном выражении, тогда вам придется применить некоторую логику ручного поиска.Вы можете искать x с помощью регулярного выражения, а затем, основываясь на том, где оно было найдено, искать a перед ним и b после него или c перед ним и d после него.Но, скорее всего, это будет больше работы, чем просто повторять его в регулярном выражении, как в ответе Гейба.
Например, вы можете сделать это:
var re = /(a|c)x(b|d)/;
var matches = str.match(re);
if (matches) {
// exclude axd or cxb
if ((matches[1] + matches[2]).match(/ab|cd/)) {
// found axb or cxd
}
}
Но, честно говоря, похоженапример, было бы проще включить x дважды и позволить движку регулярных выражений сделать за вас грязную работу:
if (str.match(axb|cxd)) {
// found match
}
Или, если слишком сложно вводить x в строку дважды, то создайте регулярное выражение самостоятельноиспользуя javascript string math:
var x = "long complicated regex";
var re = new RegExp("a" + x + "b|c" + x + "d");
if (str.match(re)) {
// found match
}