我们在JavaScript中编写了一个小脚本来查找重复项或潜在的重复项.这个剧本有时会起作用,但是对于像"网球"这样的词语,它会神秘地失败.我们正在使用jQuery.
脚步:
1)点击这里的JSFiddle演示:http://jsfiddle.net/6Hgex/.
2)单击" 检查Dupes".
3)在重复单词部分下,单词网球应列出两个条目,一个用于观看网球比赛,一个用于网球比赛.但是,由于某些原因,在检查服务网球短语时正则表达式失败- 除非我们使用Chrome开发者工具替换变量和硬编码值.当我们使用断点时,所有值看起来都是正确的,但RegEx对于这个短语失败了.
我们做错了什么?
谢谢!
JavaScript的:
// Init page $( document ).ready( function() { init(); }); function init() { $( '#box .button.dupe_clues' ).on( 'mousedown', function() { var dupe_words_list = $( '.list.dupe_words' ); dupe_words_list.empty(); var dupe_words = ['tennis']; var unique_clues = ['watching tennis match', 'serving tennis ball']; $( dupe_words ).each( function() { var highlighted_clues = highlight_dupe_word( unique_clues, this ); dupe_words_list.append( '' + this + ': ' + highlighted_clues + '' ); }); }); } function highlight_dupe_word( clues, word ) { var list = ''; // Find all clues containing this word var escaped_word = word.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var re = new RegExp( '\\b' + escaped_word + '\\b', 'gi' ); $( clues ).each( function(i, text) { if ( re.test( text ) ) { list = list + ', ' + text; } }); // Trim leading comma if ( list.length > 0 ) { list = list.substring( 2, list.length + 1 ); } // Return list return ( list ); }
HTML:
Safe CluesRepeat WordsDupe Clues
tom.. 5
不要使用g
旗帜.
var re = new RegExp( '\\b' + escaped_word + '\\b', 'i' );
该g
标志使RegExp
对象记住其位置,并在test()
再次调用时从那里继续搜索.在您的情况下,每个调用应该从字符串的开头开始.
不要使用g
旗帜.
var re = new RegExp( '\\b' + escaped_word + '\\b', 'i' );
该g
标志使RegExp
对象记住其位置,并在test()
再次调用时从那里继续搜索.在您的情况下,每个调用应该从字符串的开头开始.