我试图查看文字'名称' 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;
答案 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;
或更动态的版本:
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;
请注意,正则表达式使用\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);
}