【发布时间】:2013-12-02 09:26:54
【问题描述】:
我有这张桌子。
<input id="emp_search" />
<input id="search" type="button" value="search" />
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>number</th>
<th>letters</th>
<th>Gender</th>
<th>Company</th>
</tr>
<tr>
<td>John</td>
<td>Lennon</td>
<td>151</td>
<td>sf</td>
<td>Male</td>
<td>Corp (Technologies)</td>
</tr>
<tr>
<td>Paul</td>
<td>McCartney</td>
<td>753</td>
<td>tj</td>
<td>Male</td>
<td>Corp (Services)</td>
</tr>
<tr>
<td>George</td>
<td>Harrison</td>
<td>24</td>
<td>ge</td>
<td>Female</td>
<td>Corp Technologies</td>
</tr>
<tr>
<td>Ringo</td>
<td>Starr</td>
<td>26</td>
<td>hg</td>
<td>Female</td>
<td>Corp (Help Desk)</td>
</tr>
</table>
当您搜索“John Paul”或“John Mccartney”等确切字词时,结果应该是包含搜索字词的 2 行。 (这就是我的 jquery 的功能,你可以找到多个单词并得到多个精确的结果。
现在我的问题是,当您搜索包含“SMS Global (Help Desk)”等括号的单词时。它甚至不起作用。
$(function () {
$(' #search ').click(function () {
var str = $('#emp_search').val();
var strary = str.split(' ');
$("table").find("tr").slice(1).each(function (index) {
var text = $.trim($(this).find("td:nth-child(6)").text());
for (var i = 0; i < strary.length; i++) {
console.log("%s:%s", text, strary[i]);
var regex = new RegExp(".*\\b" + strary[i] + "\\b\.*", "gi");
$(this).toggle(regex.test(text));
console.log(regex.test(text));
if (regex.test(text))
break;
}
});
});
});
好的,这里有一个解释。假设我可以搜索的唯一列是第一列。您可以在其中键入 john 和 paul ,它们位于同一列中。和确切的词。所以关于 sms global(技术),我将搜索 sms global(技术)|sms global(帮助台),并会得到包含正在搜索的单词的两行。
代码有问题吗?我不知道这些代码。我刚找到它。我正在努力练习和理解它。但现在我只是一个新程序员。
【问题讨论】:
-
可以消除第二个循环......jsfiddle.net/arunpjohny/5kqEt/1 仍然
)不起作用 -
@Vincent 是的!不是正则表达式的人....所以不知道为什么
-
stackoverflow.com/a/2593661/1225328 会解决你的问题。
-
@sp00m 仅仅转义正则表达式是不够的。
/.*\b\(technologies\)\b.*/与 SMS Global(技术)不匹配。 -
@Vincent 那么你需要戴上思考帽,告诉我们为什么“John Paul”应该匹配 2 行,而不是没有,而“sms global (technologies)”应该匹配 1 行,而不是大于 4。即。是什么让第一个东西应该匹配任何单词,而后者应该匹配整个短语。
标签: javascript jquery regex