请注意这些文本字符串如何声明两次“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/