我可以在这里使用什么toLowerCase替代品?

时间:2016-09-01 02:52:29

标签: javascript comparison

我试图查看文字'名称' bob'的变量,并计算我找到它的次数。将文字与名称“bob'”进行比较时我发现自己需要使用toLowerCase,因为b!= B.但是当它尝试将空格转换为小写时循环失败。

我该怎么办?另外,我很感激任何改进我的代码的建议 - 我还是初学者。



var text = "Hey, how are you doing? My name is Bob. I like to sleep. Bob";

var myName = "bob";
var temp = [];
var lower = '';
var count = 0;
var hits = 0;

var valid = function(letter) {

  if (myName[count] == undefined) {
    count = 0;
  }

  var
  let = letter.toLowerCase();

  if (let === myName[count]) {
    temp.push(let);
    count++;
  } else {
    count = 0;
    temp.pop(let);
    return false;
  }

  if (myName == temp.join("")) {
    hits += 1;
    temp = [];
  }

};

for (i = 0; i < text.length; i++) {

  if (text[i] === "b") {

    for (var j = i; j < (myName.length + i); j++) {

      lower = text[j].toLowerCase();

      if (valid(lower) == false) {
        break;
      }
    }
  }
}

if (hits == 0) {
  console.log("Your name wasn't found!");
  console.log(hits);
} else {
  console.log(hits);
}
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

您获得的具体错误是Uncaught TypeError: Cannot read property 'toLowerCase' of undefined。这种情况正在发生,因为在您的内部for循环中,您正在超过text字符串的末尾。您需要检查j < text.length

for (var j = i; j < (myName.length + i) && j < text.length; j++) {

通过这种方式,您知道text[j]将具有已定义的值,因此text[j].toLowerCase()将起作用并且您的代码将会运行。

我认为您还有一些其他逻辑错误,但我没有时间为您正确调试它,尤其是当您的需求可以通过.split()使用正则表达式在一行中实现时: / p>

hits = text.split(/\bbob\b/i).length-1;

或更动态的版本:

&#13;
&#13;
var text = "Hey, how are you doing? My name is Bob. I don't like bobbing. Bob";
var myName = "bob";

var hits = text.split(new RegExp("\\b" + myName + "\\b","i")).length-1;
console.log(hits);
&#13;
&#13;
&#13;

请注意,正则表达式使用\b匹配单词周围的单词边界,以便它匹配'Bob'但不匹配'bobbing' - 如果您想要匹配'bobbing',然后只需使用text.split('bob').length-1

另请注意,通过使用带有i标志的正则表达式,它会进行大小写不匹配。

答案 1 :(得分:1)

在这种情况下,最好使用正则表达式来查找所需的文本:

public string GenerateActionLink(string id, int logicstatusId)
{
    var actionName = "Advanced";
    var controllerName = "HighAdvanced";

    if (logicstatusId == 5)
    {
        actionName = "Basic";
        controllerName = "HighBasic";
    }

    var targetUrl = UrlHelper.GenerateUrl("Default", actionName, controllerName, new RouteValueDictionary(new { id = id }), RouteTable.Routes, Request.RequestContext, false);
    return targetUrl;            
}

答案 2 :(得分:0)

这是另一种方法:

var text = "Hey, how are you doing? My name is Bob. I like to sleep. Bob";
var myName = "bob";
var re = new RegExp("\\b"+myName+"\\b","ig"); // \b==wordBoundary;i==igonoreCase;g==searchMultiple;
var m = text.match(re);
if (m==null) {
  console.log("Your name wasn't found!");
  console.log(0);
} else {
  console.log(m.length);  
}