我有这个搜索过滤器,我如何实现一个正则表达式使它像sql(像'a%')一样找到任何以 a 开头的值?
function SFName() {
var input, filter, table, tr, td, i;
input = document.getElementById("SFNameInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[0];
if (td) {
if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
这是我试过的:
function SFName() {
var input, regex, table, tr, td, i;
input = document.getElementById("SFNameInput").value;
regex = /^/gi;
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td")[2];
if (td) {
if (regex.exec(td.innerHTML).indexOf(input) > -1) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
答案 0 :(得分:1)
如果您想查看一下,可以使用myStr.indexOf(value) === 0
。这里似乎没有必要使用正则表达式。
这一行
if (regex.exec(td.innerHTML).indexOf(input) > -1) {
成为
if (td.innerHTML.indexOf(input) === 0) {
答案 1 :(得分:1)
要查找以a
开头的任何值,请使用:/^a[\s\S]*/
或/^a.*/
^
确保匹配从头开始。
a
匹配。
[\s\S]
或.
与所有人匹配。
*
匹配前面字符的0或更多。在这种情况下,它是一个通配符。
修改强>
要实现此目的,您需要将过滤器替换为:
filter = new RegExp("^" + input.value + ".*", "i");
和条件:
if (td.innerHTML.match(filter)) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
RegExp中的“i”使正则表达式不区分大小写。