var string = $.trim("How are you ? are you fine ?");
var part = $.trim("How are you ? are you fine ?");
var SearchResult = string.match(part);
if (SearchResult != null && part!="") {
alert("hello1");
}
string = $.trim("How are you ? a");
part = $.trim("How are you ? a");
SearchResult = string.match(part);
if (SearchResult != null && part!="") {
alert("hello2");
}
string = $.trim("How are you ?");
part = $.trim("How are you ?");
SearchResult = string.match(part);
if (SearchResult != null && part!="") {
alert("hello3");
}
只有第三次警报有效;第一个和第二个字符串有什么问题?
答案 0 :(得分:2)
我认为问题是你在字符串中有一个问号,它被解析为一个特殊的正则表达式字符。您应该尝试将其转义为\?
。
答案 1 :(得分:1)
使用非RegExp对象调用match
时,它将转换为RegExp:
如果传递了非RegExp对象
obj
,则使用new RegExp(obj)
将其隐式转换为RegExp。
这意味着由于?
是正则表达式中的特殊字符(意味着前面的表达式可能重复零次或一次),因此需要使用\?
对其进行转义。由于\
也需要在字符串声明中进行转义,因此您需要:
var part = $.trim("How are you \\? are you fine \\?");
更简单的方法是使用indexOf
返回匹配开头的索引,如果没有匹配则使用-1
:
string.indexOf(part) > -1
答案 2 :(得分:0)
应该是:
part = $.trim("How are you \\? a")
答案 3 :(得分:0)
实际上,前两个警报工作正常;第三个只是意外匹配。如果您打印匹配结果,您会看到最后没有问号。正如其他响应者所说,?
是metacharacter,因此/How are you ?/
匹配“你好吗”,后面跟一个空格。
正如其他人所说,如果你想匹配一个文字问号,你必须逃避它。如果你想强制正则表达式匹配整个字符串或什么都没有,你需要在两端锚定它:
/^How are you \?$/