[英]Using regular expressions in JavaScript for checking pattern reuse (e.g. the same sequence of characters declared twice in string)
注意这些文本字符串如何两次声明单词“ GARNSEY”:
"GARNSEY B R & D B GARNSEY"
"GARNSEY B R & D GARNSEY"
现在可以是D GARNSEY(无中间名首字母)或DB 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的用途,是否有任何解决方案可以使用正则表达式来完成我想做的事情,如上所示? 感谢您的回复。
此正则表达式将测试是否有名称,后跟任意数量的垃圾,并以相同的名称结尾:
var re = /^(\w+)\b.+\b\1$/;
re.test( "GARNSEY B R & D B GARNSEY" ); // true
re.test( "GARNSEY B R & D GARNSEY" ); // true
re.test( "GARNSEY B R & D GURNSEY" ); // false
re.test( "GARNSEY B R & D ZGARNSEY" ); // false
在正则表达式的开头删除\\ 1。 之后,它仍然不会报告通过,但是这可能是您的regexpr中的其他错误。 我试图简化您的代码以实现大致相同的效果:
(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");
})()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.