0

我需要一些关于正则表达式的帮助。我从其他地方借用了这段代码,它工作正常。我需要做的就是捕获搜索文本,然后用书面文本替换任何符号(如果存在这些符号)。但是我需要允许用户使用数字和小数进行搜索,例如搜索金额为 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];
                        });
4

1 回答 1

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对象中(或减少匹配的字符集)。目前,您的对象中有冒号和分号但不匹配它们,并且您匹配gw,kw以及不在symbols.

顺便说一句,您不需要转义正则表达式文字中的引号。然而,在字符类中,您将不得不转义连字符/减号。否则,它将表示一个范围,如a-z, 并且在您的情况下+-=匹配任何+,-./0123456789:;<=.

于 2013-06-03T19:27:05.320 回答