我需要一些正则表达式的帮助。我从其他地方借用了这段代码,而且工作正常。我需要做的就是捕获搜索文本,然后用书面文本替换任何符号(如果存在这些符号)。但是我需要允许用户使用数字和小数进行搜索,例如搜索金额为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];
});
答案 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
中对象(或减少匹配的字符集)。目前,您的对象中有冒号和分号但与它们不匹配,并且您匹配gw
,kw
和不在symbols
中的各种空格。
顺便说一下,你不需要在正则表达式文字中转义引号。然而,在character class中你必须逃脱连字符/减号。否则,它会表示a-z
之类的范围,在您的情况下+-=
确实匹配+,-./0123456789:;<=
中的任何一个。