正则表达式完全匹配文本不起作用

时间:2015-07-22 20:04:52

标签: javascript jquery regex

我正在尝试对文本框中键入的文本执行精确匹配,但不知何故,它正在作为部分匹配。我尝试了不同的选择,但无法弄清楚原因。

RegExp.escape = function (text) {
    //escape the +,[,?... characters
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

var resultLbl = $('#ResultLbl');

$('#SearchTxtBox').bind('change keyup', function () {
  
resultLbl.text('');

var options = [];

options.push('[1]My]');
options.push('[2]My Name]');
options.push('[3]Name]');
options.push('[2]My Name]');

var searchStr = RegExp.escape($.trim($(this).val()));  

var searchArr = [];

if (searchStr != '' && searchStr != null) {
    searchStr = searchStr.replace(/\,/g, '\\ ')
    searchArr = searchStr.split('\\ ');
}

var search =  searchArr[0]; 

search = search.replace(/[.?*+^$[\]\\(){}|-]/g, '');

var regex = new RegExp($.trim(search), 'gi');

$.each(options, function (i, option) { 

if (option.match(regex) !== null) {
   resultLbl.append(option + ' ');
  }
});

 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Search:
<input type="text" id="SearchTxtBox"/>
<br/>
<label id='ResultLbl'></label>

期望:

  • 如果您在文本框中键入“名称”文本,则只应包含“[3]名称” 匹配。
  • 如果您在文本框中键入“我的姓名”字样,则只有'[2]我的 名称'应匹配。

任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以测试字符串是否与此模式匹配,而不是复杂的预处理:

^\[\d+\]<searchStr>\]$

var regex = new RegExp("^\\[\\d+\\]" + $.trim(searchStr) + "\\]$", 'gi');

这是一个更新的代码段:

&#13;
&#13;
    RegExp.escape = function (text) {
        //escape the +,[,?... characters
        return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    }

    var resultLbl = $('#ResultLbl');

    $('#SearchTxtBox').bind('change keyup', function () {
      
    resultLbl.text('');

    var options = [];

    options.push('[1]My]');
    options.push('[2]My Name]');
    options.push('[3]Name]');
    options.push('[2]My Name]');

    var searchStr = RegExp.escape($.trim($(this).val()));  

    var regex = new RegExp("^\\[\\d+\\]" + $.trim(searchStr) + "\\]$", 'gi');

    $.each(options, function (i, option) { 

    if (option.match(regex) !== null) {
       resultLbl.append(option + ' ');
      }
    });

 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Search:
<input type="text" id="SearchTxtBox"/>
<br/>
<label id='ResultLbl'></label>
&#13;
&#13;
&#13;