我有Javascript代码,我在其中获取大量文本,在每个时段将其分开,将其加载到数组中,并使用replace()删除任何html标记。然后,我需要使用递归函数来查找字符串中的第一个字母字符,因为我想在第一个字母字符上放置特定的格式。对我来说,它应该在substring(0,1)......
......问题是,我遇到过这个问题,第一个字母字符通常是子字符串(2,3),但并非总是如此。所以我在下面编写了递归函数。问题是0,1,2处的字符,有时3不是空格,但它不是字母字符。如果我做eval(),那么它就是未定义的'。但是当我在未定义的'之后的eval()时,我的递归函数失败了。字符。我错过了什么,但不确定是什么。
任何想法如何测试那些未定义的第一个字符'?我想它们是replace()的结果。
function getFirstLetter(text,count){
// If first time calling the function, count will be null so set to 0
if(count == null){
count = 0;
}
// Get the character at the count index
thisChar = eval(text.charAt(count));
// Is this character the first alphabetic character? If so, return
// Here's where the problem occurs...I've noticed that the function
// will return 'undefined' for the first few non-alphabetic characters
// but then it stops at the first alphabetic character, no idea why
if(thisChar != 'undefined' && thisChar != null){
return count;
}else{
// If not, call the function again for the next index
getFirstLetter(text,count+1);
}
}
示例数组文本:
Here is a line of text, Here is the next line, And the next line
但如果我检查每个第一个字符,我就不会得到字母字符或空格。当我做警报(array.charAt(0))时,我得到一个没有任何内容的警报。警报中没有空格。
答案 0 :(得分:1)
你可能想要的是一种利用这样的正则表达式的方法:
function getFirstLetter(text){
return text.search(/[a-zA-Z]/);
}
您的代码存在一些问题:
count
),函数中的undefined
将不是null
'undefined'
而不是预期的特殊值undefined
eval
似乎有点hacky和反直觉。改为使用短路OR运算符||
;那么你只需要一次比较 - thisChar != null
- 无论如何您的代码完全改进了:
function getFirstLetter(text,count){
if(count == undefined){
var count = 0;
}
var thisChar = text.charAt(count)||null;
if(thisChar != null){
return count;
}
else{
getFirstLetter(text,count+1);
}
}
遗憾的是,你剩下的是一个无用的函数,它会返回一个数字或中止一个InternalError: too much recursion
,因为charAt(
n )
将具有足够低的 n 以在''
。
因此,请坚持使用上面的RegExp解决方案。