javascript - 正则表达式精确文本匹配不起作用

标签 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]我的名字” 名称'应该匹配。

如有任何建议,我们将不胜感激。

最佳答案

无需进行复杂的预处理,您只需测试字符串是否与此模式匹配即可:

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

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

这是更新的代码片段:

    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 + ' ');
      }
    });

 });
<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>

关于javascript - 正则表达式精确文本匹配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572957/

相关文章:

JavaScript 数组问题

javascript - swfobject.embedSWF youtube 视频覆盖在 chrome 中,不透明度不起作用

javascript - 无法使用 AJAX Jquery 将值发布到 php 文件

regex - MATLAB 转义括号

.net - 正则表达式问题

javascript - 尝试附加一个元素 jQuery

javascript - 加载弹出窗口?

php - JSON 在 JavaScript 中的使用

javascript - 使用 jQuery 和 Ajax 进行基本身份验证

javascript - 我想使用 Javascript Replace() 添加 html 标签(但它以字符串形式返回它们)