javascript正则表达式仅返回字母

javascript正则表达式仅返回字母,javascript,regex,Javascript,Regex,我的字符串可以是A01、B02、C03,将来也可能是AA18。我想我可以用一个正则表达式来获取字母,然后在我的正则表达式上工作,因为我对它做得不多。我写了这个函数: function rowOffset(sequence) { console.log(sequence); var matches = /^[a-zA-Z]+$/.exec(sequence); console.log(matches);

我的字符串可以是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));

我的
匹配项
继续为空。我这样做对吗?看着这篇文章,我认为正则表达式是正确的:

你对另一个问题的目的感到困惑:他想检查他的字符串中是否只有字母

您需要删除分别匹配字符串开头和结尾的锚点
^$

[a-zA-Z]+
这将匹配输入字符串中的第一个字母

如果可能有更多匹配项(即您希望单个字符串中有多个匹配项),请使用

您可以使用
String#replace
从输入字符串中删除所有非字母:

var r = 'AA18'.replace(/[^a-zA-Z]+/g, '');
//=> "AA"

您的主要问题是在正则表达式模式中使用
^
$
字符
^
表示字符串的开头,
$
表示字符串的结尾,因此您的模式正在查找一个字符串,该字符串从字符串的开头到结尾仅为一组一个或多个字母

此外,如果您想获得字母的每个单独实例,您需要在正则表达式模式的末尾包含“全局”指示符(
g
):
/[a-zA-Z]+//g
。忽略这一点意味着它只会找到模式的第一个实例,然后停止搜索。添加它将匹配所有实例

这两个更新应该会让你继续前进


编辑:

此外,您可能希望使用
match()
而不是
exec()
。如果您有一个包含多个值的字符串(例如,
“A01、B02、C03、AA18”
),则
match()
将在一个数组中返回所有值,而
exec()
将只匹配第一个值。如果只有一个值,那么
exec()
就可以了(而且您也不需要“全局”标志)

如果要使用
match()
,只需将代码顺序稍微更改为:

var matches = sequence.match(/[a-zA-Z]+/g);
您可以这样做:

var r = 'AA18'.replace(/[\W\d_]/g, ''); // AA

这个
/[^a-z]/g
解决了这个问题。看看下面的例子

函数盘片(str){
设regExp=/[^a-z]/g;
让letters=str.toLowerCase().replace(regExp.);
document.getElementById('letters')。innerHTML=字母;
}
pangram(‘GHV 2#%hfr efg uor7 489(*&^%knt lhtkjj ngnm!@#$%^&*());

也可以通过
String.prototype.split(regex)
完成


这里,regex将给定字符串除以数字
(\d+)

链接的regex
^[a-zA-Z\s]+$
有一个不同的用途:它用于验证字符串是否只包含字母(和空格)。您希望匹配字符串中的字母。我想指出的是,此Q&As只针对英文字母,而不是“所有字母”,但字面上只有a-z/a-z,没有变音/重音字母,它不会匹配像
é、è、è、ò、å、æ、œ、ē、č、ŭ等字母:)那样的字母,你需要
/\p{Letter}/gu
/g
并不意味着“贪婪”,而是意味着“全球”“:@SeanKendle。从技术上讲,是的当我回答这个问题时,我想我一定一直在思考fflag是如何改变行为的(“贪婪”似乎比“全局”更适合描述“捕获所有实例,而不仅仅是第一个实例”)。我已经更新了帖子的准确性。但是,对于regex,贪婪有一个非常具体的含义,而
/g
并不是这样。这并没有保留案例。显然,这和其他答案是一样的。
var r = 'AA18'.replace(/[\W\d_]/g, ''); // AA
'AA12BB34'.split(/(\d+)/);      // ["AA", "12", "BB", "34", ""]
'AA12BB34'.split(/(\d+)/)[0];   // "AA"