我的字符串可以是A01,B02,C03,也可能是AA18.我以为我可以使用正则表达式来获取字母并在我的正则表达式上工作,因为我没有做太多的事情.我写了这个函数:
function rowOffset(sequence) {
console.log(sequence);
var matches = /^[a-zA-Z]+$/.exec(sequence);
console.log(matches);
var letter = matches[0].toUpperCase();
return letter;
}
var x = "A01";
console.log(rowOffset(x));
Run Code Online (Sandbox Code Playgroud)
我matches继续为空.我这样做了吗?看看这篇文章,我认为正则表达式是正确的:只有字符az,AZ的正则表达式
anu*_*ava 22
您可以使用String#replace从输入字符串中删除所有非字母:
var r = 'AA18'.replace(/[^a-zA-Z]+/g, '');
//=> "AA"
Run Code Online (Sandbox Code Playgroud)
tal*_*myn 12
您的主要问题是在正则表达式模式中使用^和$字符. ^表示字符串的开头并$指示结束,因此您的模式正在查找一个字符串,该字符串仅包含一个或多个字母的组,从字符串的开头到结尾.
此外,如果你想获得的字母单独的每个实例,您要包括"全局"指示灯(g)在你的正则表达式的结尾: /[a-zA-Z]+/g.离开这意味着它只会找到模式的第一个实例,然后停止搜索...添加它将匹配所有实例.
这两个更新应该让你去.
编辑:
此外,您可能想要使用match()而不是exec().如果你有一个包含多个值的字符串(例如"A01, B02, C03, AA18"),match()则会将它们全部返回到数组中,而exec()只会匹配第一个值.如果只有一个值,那exec()就没问题了(你也不需要"全局"标志).
如果您想使用match(),您需要稍微更改您的代码顺序:
var matches = sequence.match(/[a-zA-Z]+/g);
Run Code Online (Sandbox Code Playgroud)