2017-05-30 119 views
-1

我有这样的代码:正则表达式测试如何只返回精确匹配

var search_term = postAdminID 

    // Wildcards Search 
    var search = new RegExp(search_term, "i"); 
    sdsFilter = $.grep(sdsInfo.products, function(element, index) { 
     var sted = search.exec(element.AdminID) 

     return sted; 

postAdminID是在阵列中的spesific后的指数。

element.AdminID是我正在研究的相应索引。

问题: 每当我尝试执行这个搜索,我得到每个匹配的索引也索引匹配的部分。

可以说我想检索索引#78。上面的代码返回:78,178,278,10078等等。我只想要确切的指数 - 不是每个包含指数的指数。

我已经尝试过.exec和测试 我已经在每个帖子里看到了我可以找到的stackoverflow。

请帮忙。 如何为正则表达式指定它应该只查找整个“字符串”?

+1

你试图匹配的字符串是什么样的? – atomrc

+0

我假设你正在试图在列表中找到一个?您需要添加您用来将项目分隔到搜索模式的任何内容,否则它将在全局执行,因为它将其视为搜索[souce:MDN](https://developer.mozilla.org/zh-CN/) docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec) –

+0

search_term包含哪些内容?编辑你的问题,并包括必要的细节。没有正则表达式模式和样本数据,一些代码就没有用处。 –

回答

1

问题是您正在使用的搜索模式。

在REGEX中,您可以匹配行的开头和结尾(在单行字符串的情况下字符串的开头和结尾)。为此,请在搜索模式的开头添加^,并在末尾添加$

例如^78$如果您正在寻找在带分隔符的字符串,其中包含许多指标将只匹配指数78,而不是178278 ...

,你将不得不增加在搜索模式的界定,或分割字符串并搜索其基本元素。

1

试试这个正则表达式:
\b78\b

\b将确保这仅仅是78,而不是78包含
在你的情况了许多,SEARCH_TERM应该是:
var search_term = "\b"+postAdminID+"\b"

0

谢谢你你的意见。这两个建议确实使事情有效。除了他们限制使用脚本用于其他目的。我想使用一个搜索算法不仅仅是整数键。

最后我用这个脚本结束了,使用:return element.AdminID == postAdminID;

var search_term = postAdminID 

// Wildcards Search 
var search = new RegExp(search_term, "i"); 
sdsFilter = $.grep(sdsInfo.products, function(element, index) { 
    var sted = search.exec(element.AdminID) 
    return element.AdminID == postAdminID; 
}); 

我还添加了几个search.exec进来,以便我的脚本变得更加灵活和有弹性。但是再次感谢您的宝贵意见。