我试图弄清楚如何编写正确的正则表达式,所以当jquery DataTables搜索一列时,它会找到完全匹配。我有C-,C +,C的值,如果有人点击" C"我需要它才能获得C的精确匹配,而不是其他2.
如果他们选择C-和C,它应该使用其中任何一个获取所有条目,但不应包含C +。
我尝试了正则表达式:" C- | C +"但它也抓住了所有的C.
这是我创建正则表达式的代码:
$("input[name='tourneyLevel']").on("change", function(e) {
var levelSelected = [];
$("input[name='tourneyLevel']:checked").each(function(index, city) {
levelSelected.push([$(this).val()]);
});
var regex = levelSelected.join("|");
console.log(regex);
$('.dataTable').DataTable().column(4).search(regex, true, false).draw();
});
答案 0 :(得分:4)
" +"和" - "在RegEx中往往具有特殊含义。在构建RegEx时,尝试将它们转义并将短语放在一个组中,因为您希望匹配整个组。
因此,您的用户正在搜索" C +"?
(C\+)
您的用户正在搜索" C"或" C - "?
(C\-)|(C)
您的用户正在搜索" C - "或" C +"?
(C\-)|(C\+)
您的用户正在搜索三种可能性中的任何一种?
(C\-)|(C)|(C\+)
加号通常表示"前一组中的一个或多个"。减号通常用于范围或排除东西。搜索这些特殊字符时要小心。当按特定顺序搜索多个字符时,您应该尝试将它们与括号分组。
此外,反斜杠用于转义字符串中的字符。通过连接字符串构造RegEx时,必须使用第二个反斜杠转义反斜杠,以便生成的RegEx包含单个反斜杠。这可能听起来很复杂,但归结为:
在通过连接字符串构建RegEx时,使用两个反斜杠来转义RegEx中的字符。
要确保只匹配此特定序列,您可以使用两个更重要的特殊字符:
^
开始$
结束例如,您可以使用RegEx (^C$)
仅匹配单个" C"。序列开始,恰好包含字符" C"并在使用此RegEx时结束。