如何使用空格创建正则表达式以过滤数据表

时间:2014-02-10 13:06:57

标签: javascript jquery regex datatable

我的页面上有一些预定义的过滤器选项来过滤我的数据表。单击一个时,它将添加到特定列的过滤器中。但是我对空格有一个很大的问题......比如我有这些选择:

“老而好”,“便宜又好”,“贵”

所有点击的选项都存储在一个数组中。对于过滤我做

var term = array.join('|'); //--> term = "old & good|cheap & nice|expensive"
dataTable.fnFilter(term, column, true, true);

如果没有带空格的字符串和“&”,它可以正常工作或只有一个。 一个独特的“廉价和优秀”正在发挥作用,但“便宜又好又不贵”并不......当没有空格时,“昂贵的|什么都有”。

如何让过滤器正常工作?

-------- ----------编辑

进一步解释:

我的代码从(用户定义的)csv导入数据,并为第一列生成一些按钮,一个按钮用于此列中的每个唯一条目。用户可以单击按钮来过滤表格,只显示单击的主菜单。该按钮将条目作为值获取,如本例所示。

<input type="button" value="cheap & nice" onclick="myFilterFunction(this)"/>

要知道单击了哪些按钮,它们的值将存储在正常数组中。我的单击回调函数查看此数组,将名称连接到一个正则表达式并将此字符串提供给fnFilter(),就像上面发布的那样。

只要没有包含空格的条目,这就可以正常工作。但我无法删除空格,因为那时过滤器找不到真正有空格的条目。

3 个答案:

答案 0 :(得分:2)

最后,经过很长时间,我找到了解决问题的方法。

var array = ["old & good","cheap & nice","expensive"];
var regexp = array.join('|').replace("&", "\\&").replace(/\s/g, "\\s");
--> "old\s\&\sgood|cheap\s&\snice|expensive"

将这个词赋予fnFilter()作品!

但是有一个函数可以很好,它可以将所有特殊字符转换为相应的正则表达式,以@BoomyJee建议的方式。如果有这样的功能,请告诉我。

答案 1 :(得分:1)

你应该引用特殊字符。

如果这是常量字符串,只需使用斜杠'old /&amp;好“

如果这是用户输入,则应使用引用功能。 JS中默认没有这样的功能,但您可以使用http://phpjs.org/functions/preg_quote/

    function preg_quote (str, delimiter) {
      return (str + '').replace(new RegExp('[\&.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
    }

因此,如果您有以下用户输入:

    var input = ["old & good","cheap & nice","expensive"];
    var regexp_string = input.map(function(val){ return preg_quote(val,"/") }).join("|");

答案 2 :(得分:0)

您可以使用this之类的内容删除javascript中的空格而不是正则表达式:

s.replace(/\s+/g, ' '); 

this

var str = "       Hello World!        ";
alert(str.trim());