我的字符串可以是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));
我的matches
仍为空。我这样做了吗?看看这篇文章,我认为正则表达式是正确的:Regular expression for only characters a-z, A-Z
答案 0 :(得分:20)
您可以使用String#replace
删除输入字符串中的所有非字母:
var r = 'AA18'.replace(/[^a-zA-Z]+/g, '');
//=> "AA"
答案 1 :(得分:12)
您的主要问题是在正则表达式模式中使用^
和$
个字符。 ^
表示字符串的开头,$
表示结束,因此您的模式是从一开始就查找 ONLY 一组一个或多个字母的字符串到字符串的末尾。
此外,如果您想获得字母的每个单独实例,您希望在正则表达式模式的末尾包含“全局”指示符(g
):/[a-zA-Z]+/g
。离开这意味着它只会找到模式的第一个实例,然后停止搜索。 。 。添加它将匹配所有实例。
这两个更新应该让你去。
修改强>
此外,您可能希望使用match()
而不是exec()
。如果您有一个包含多个值的字符串(例如"A01, B02, C03, AA18"
),match()
会将它们全部返回到数组中,而exec()
只会匹配第一个值。如果只有一个值,那么exec()
就可以了(你也不需要“全局”标志)。
如果您想使用match()
,则需要将代码顺序更改为:
var matches = sequence.match(/[a-zA-Z]+/g);
答案 2 :(得分:2)
你对另一个问题的目标感到困惑:他想检查他的字符串中是否只有 字母。
您需要删除分别匹配字符串开头和结尾的锚点^$
:
[a-zA-Z]+
这将匹配输入字符串中的第一个字母。
如果可能还有更多(即您希望单个字符串中有多个匹配项),请使用
sequence.match(/[a-zA-Z]+/g)
答案 3 :(得分:1)
此/[^a-z]/g
解决了该问题。看下面的例子。
function pangram(str) {
let regExp = /[^a-z]/g;
let letters = str.toLowerCase().replace(regExp, '');
document.getElementById('letters').innerHTML = letters;
}
pangram('GHV 2@# %hfr efg uor7 489(*&^% knt lhtkjj ngnm!@#$%^&*()_');
<h4 id="letters"></h4>
答案 4 :(得分:1)
也可以通过String.prototype.split(regex)
完成。
'AA12BB34'.split(/(\d+)/); // ["AA", "12", "BB", "34", ""]
'AA12BB34'.split(/(\d+)/)[0]; // "AA"
此处正则表达式将给定字符串除以数字(\d+)
答案 5 :(得分:0)
你可以这样做:
var r = 'AA18'.replace(/[\W\d_]/g, ''); // AA