Javascript 用于重叠匹配的正则表达式和运算符

Javascript 用于重叠匹配的正则表达式和运算符,javascript,regex,string,Javascript,Regex,String,我有两个不同长度的字符串 chriscattano 我有两个字符串共享的长度为3到10的子字符串 (chr)(hri)(ris)(cat)(att)(tta)(tan)(ano)(chri)(hris)(catt)(atta)(ttan)(tano)(chris)(catta)(attan)(ttano)(cattan)(attano)(cattano) 我正在尝试将它们放入正则表达式搜索中,该搜索将成功匹配单词chris和cattano,以便我可以执行。替换,并将带有sass类的应用于匹配

我有两个不同长度的字符串

chriscattano
我有两个字符串共享的长度为3到10的子字符串

(chr)(hri)(ris)(cat)(att)(tta)(tan)(ano)(chri)(hris)(catt)(atta)(ttan)(tano)(chris)(catta)(attan)(ttano)(cattan)(attano)(cattano)
我正在尝试将它们放入正则表达式搜索中,该搜索将成功匹配单词
chris
cattano
,以便我可以执行
。替换
,并将带有sass类的
应用于匹配结果

如果我将正则表达式的格式设置为:

/(chr)|(hri)|(ris)|(cat)|(att)|(tta)|(tan)|(ano)|(chri)|(hris)|(catt)|(atta)|(ttan)|(tano)|(chris)|(catta)|(attan)|(ttano)|(cattan)|(attano)|(cattano)/g
我设法在
chr
cattan
上相互匹配,但我不知道如何突出显示
chr
cattano
;我缺少
is
o

这个例子可能会有很大的变化,因为我只是用我的名字来测试和完善功能。它最终将用于电子邮件地址、姓名和地址。因此,更改捕获组的顺序(如果可以解决这一问题)不是一个解决方案,当它变得更加动态时,当捕获组被放入正则表达式对象并作为参数输入到
.replace()
方法时,我将无法控制捕获组的顺序

这是一个正则表达式,我一直在尝试各种方法来突出显示我需要的匹配。希望有人能把它修好,让它工作起来


您需要按长度降序对数组中的项进行排序,以确保首先测试最长的替代项,然后使用
将它们连接到一个模式中。join(“|”)


这是因为在NFA正则表达式(如JS或大多数其他正则表达式)中,找到的第一个替代方法会使正则表达式引擎停止处理组。您可以在中了解更多信息。

您的最终目标是什么?您是否正在尝试编写突出显示两个字符串的公共子字符串的代码?我觉得正则表达式不是这里的正确解决方案。@Jordan是的,当给定两个字符串时,我有一个代码可以提取长度在3到10之间的所有共享子字符串。其思想是,这些子字符串将被传递给一个regex对象ad,用作.replace()方法中的参数。.replace()方法将用包含指定背景颜色的sass类的范围替换匹配的单词。它看起来类似于h.replace(regexObj,
${regexObj}
);秩序重要吗?Chriscatano和cattanoXYZchris的产量是多少?在枚举公共子字符串时有很多困难。你有令人信服的理由重新发明轮子吗?你需要按长度按降序对分组进行排序。你可以通过编程来完成。然后将它们放入一个量化组,
(cattano | chris |…)+
。这是因为在NFA正则表达式(如JS或大多数其他)中,找到的第一个替代方法会使正则表达式引擎停止处理该组,并返回匹配项。DFA返回最长的备选匹配,但JS正则表达式引擎的情况并非如此。
/(chr)|(hri)|(ris)|(cat)|(att)|(tta)|(tan)|(ano)|(chri)|(hris)|(catt)|(atta)|(ttan)|(tano)|(chris)|(catta)|(attan)|(ttano)|(cattan)|(attano)|(cattano)/g