javascript - 没有中间表达式重复的正则表达式 (axb|cxd)

标签 javascript regex lookahead

我只是不断地用这个碰壁,我无法解决它。我正在尝试获取一个执行为的正则表达式:

(axb|cxd)

除了在表达式中不重复 x(因为它是很长的编码匹配表达式)。这是针对一个大字符串进行测试的,我只需要匹配 x 来进行字符串替换,因此零宽度先行/后向是一个选项。有什么想法吗?

a、b、c 和 d 相当小,因此如果表达式更容易形成,它们可以重复。

提前致谢。

最佳答案

如果您真的不想在正则表达式中重复 x,则必须应用一些手动搜索逻辑。您可以使用正则表达式搜索 x,然后根据找到它的位置,查找它之前的 a 和它之后的 b 或它之前的 c 和它之后的 d。但是,这可能比在 Gabe 的回答中仅在正则表达式中重复它需要更多的工作。

例如,您可以这样做:

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 字符串数学自行构建正则表达式:

var x = "long complicated regex";
var re = new RegExp("a" + x + "b|c" + x + "d");
if (str.match(re)) {
    // found match
}

关于javascript - 没有中间表达式重复的正则表达式 (axb|cxd),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264524/

相关文章:

javascript - 并行开发同步/阻塞和异步/非阻塞库-api 的好方法是什么? (JavaScript)

javascript - IsBasicLatin 和 IsLatin-1Supplement 作为 JavaScript 正则表达式

c# - 正则表达式需要将字母数字字符串与一个数字的最小值进行匹配向前看只检查第二个位置

javascript - 如何在正则表达式中使用前瞻来匹配无字符?

javascript - 以编程方式更改 jQuery 文件上传 (blueimp) 的 previewMaxWidth/Height

javascript - 如何使用 Angular JS 在状态之间导航

javascript - Regex Javascript - 无效的正则表达式 : Nothing to repeat for number input

javascript - 如何为带有尾随页面的网站 url 编写正则表达式

php - 左侧的正则表达式不贪婪(即,两侧可能的最窄匹配)

javascript - 如果该 div 上没有事件发生,则在一段时间后隐藏该 div