javascript - 在 JavaScript 中使用正则表达式来检查模式重用(例如,在字符串中声明两次的相同字符序列)

标签 javascript regex pattern-recognition

请注意这些文本字符串如何声明两次“GARNSEY”一词:

"GARNSEY B R & D B GARNSEY"
"GARNSEY B R & D GARNSEY"

现在可以是 D GARNSEY(没有中间名首字母)或 D B GARNSEY(包括中间名首字母),但我需要知道是否提到了 GARNEY,因为这意味着姓氏被提及两次,一次在开头,一次在结尾。

根据《JavaScript 程序员引用》一书:

“您可以在整个模式中重复搜索该确切符号...您可以使用\1 来执行此操作。使用\1 指的是第一个分组表达式的结果。”

好吧,所以我尝试“保存”第一组\w{1,})\1 的结果,然后我尝试在最后重用它,并尝试检查是否有中间名:

 /^(\w{1,})\1\s\w{1,}((?:\s\w{1,})?)+\s+&\s+\w{1,}\s(((?:\s\w{1,})?)+)\1$/;

然而,JavaScript 解释器通过以下简单测试发出“失败”警报:

(function(){
 var checkChar = function(txt){
 var regex = /^(\w{1,})\1\s\w{1,}((?:\s\w{1,})?)+\s+&\s+\w{1,}\s(((?:\s\w{1,})?)+)\1$/;

  (regex.test(txt)) ? alert('passed') : alert('failed');

 }

 checkChar("GARNSEY B R & D B GARNSEY");
})()

我是否误解了\1 的目的,是否有任何解决方案可以使用正则表达式执行我想要执行的操作,如上所示?感谢您的回复。

最佳答案

删除正则表达式开头的\1。之后它仍然不会报告通过,但这可能是您的正则表达式中的其他错误。我尝试简化您的代码以执行或多或少相同的操作:

(function(){
 var checkChar = function(txt){
var regex = /^(\w+)(\s\w+)+\s+&\s+(\w+\s)+\1$/;

  (regex.test(txt)) ? alert('passed') : alert('failed');

 }

 checkChar("GARNSEY B R & D B GARNSEY");
})()

关于javascript - 在 JavaScript 中使用正则表达式来检查模式重用(例如,在字符串中声明两次的相同字符序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682632/

相关文章:

javascript - 如何选择具有特定兄弟元素的元素?

javascript - 如何防止组件在react动画后渲染

javascript - 将整数拆分为 2 位数字并放入数组 Javascript

regex - 如何创建使用正则表达式将文本中的字符串替换为制表符的 powershell 脚本

c# - 匹配包含至少 3 个破折号/连字符的字符串的正则表达式

regex - 根据模板生成所有字符串组合

matlab - 绘制两个多元高斯的决策边界

Javascript 函数参数转换为 jQuery 或 HTML 标签

statistics - 计算相似度的方法

algorithm - 用于检测血细胞的模式识别算法