如何更改此正则表达式以允许按数字搜索?

时间:2013-06-03 18:01:38

标签: javascript regex

我需要一些正则表达式的帮助。我从其他地方借用了这段代码,而且工作正常。我需要做的就是捕获搜索文本,然后用书面文本替换任何符号(如果存在这些符号)。但是我需要允许用户使用数字和小数进行搜索,例如搜索金额为447.23的发票,但返回“未定义”。

var symbols = {
                    "$": "_dollar_",
                    "@": "_at_",
                    "#": "_pound_",
                    "%": "_percent_",
                    "&": "_amper_",
                    "*": "_star_",
                    "(": "_lparen_",
                    ")": "_rparen_",
                    "+": "_plus_",
                    "-": "_minus_",
                    "=": "_equal_",
                    ".": "_period_",
                    "\'": "_singlequote_",
                    "\"": "_quote_",
                    ":": "_colon_",
                    ";": "_semicolon_",
                    " ": "_space_",
                    ",": "_comma_"
                };

如何更改此正则表达式以允许在搜索中使用数字?非常感谢。感谢。

var search_text = $("#container").val();
   search_txt = search_txt.replace(/[$@#%&*()+-=.\'\",\s]|gw|kw/g, function(s) {
                            return symbols[s];
                        });

1 个答案:

答案 0 :(得分:0)

现在我找到了你,你想要

search_txt = search_txt.replace(/[$@#%&*()+\-=.'",\s]|gw|kw/g, function(s) {
    if (s in symbols)
        return symbols[s];
    else
        return s; // the input
});

您还可以将其缩短为return symbols[s] || s(如果symbols中没有空字符串),但我建议您将所有匹配的序列放在symbols中对象(或减少匹配的字符集)。目前,您的对象中有冒号和分号但与它们不匹配,并且您匹配gwkw和不在symbols中的各种空格。

顺便说一下,你不需要在正则表达式文字中转义引号。然而,在character class中你必须逃脱连字符/减号。否则,它会表示a-z之类的范围,在您的情况下+-=确实匹配+,-./0123456789:;<=中的任何一个。