【问题标题】:I have a problem with string.match(part) (javascript)我对 string.match(part) (javascript) 有疑问
【发布时间】:2010-09-03 11:26:52
【问题描述】:
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");
}

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

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    我认为问题在于字符串中有一个问号,它被解析为特殊的正则表达式字符。您应该尝试将其转义为 \?

    【讨论】:

      【解决方案2】:

      match被一个非RegExp对象调用时,它被转换为一个RegExp:

      如果传递了非正则表达式对象obj,则使用new RegExp(obj) 将其隐式转换为正则表达式。

      这意味着由于? 是正则表达式中的特殊字符(意味着前面的表达式可能重复零次或一次),您需要使用\? 对其进行转义。由于\ 也需要在字符串声明中进行转义,因此您需要:

      var part = $.trim("How are you \\? are you fine \\?");
      

      更简单的方法是使用 indexOf 返回匹配开始的索引,如果没有匹配则使用 -1

      string.indexOf(part) > -1
      

      【讨论】:

        【解决方案3】:

        应该是:

        part = $.trim("How are you \\? a")
        

        【讨论】:

          【解决方案4】:

          实际上,前两个警报工作正常;第三个只是偶然匹配。如果您打印匹配结果,您会看到末尾没有问号。正如其他响应者所说,?metacharacter,所以/How are you ?/ 匹配序列“你好吗”,可以选择后跟一个空格。

          正如其他人所说,如果要匹配文字问号,则必须对其进行转义。如果你想强制正则表达式匹配整个字符串或什么都不匹配,你需要在两端锚定它:

          /^How are you \?$/
          

          【讨论】:

            猜你喜欢
            • 2020-12-30
            • 2017-02-22
            • 2019-05-06
            • 1970-01-01
            • 2014-01-28
            • 2010-09-09
            • 2020-10-17
            • 2021-05-23
            • 1970-01-01
            相关资源
            最近更新 更多