我有string.match(部分)(javascript)的问题

时间:2010-09-03 11:26:52

标签: javascript regex match

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");
}

只有第三次警报有效;第一个和第二个字符串有什么问题?

4 个答案:

答案 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 \?$/