编程题:JS-计数、流程语句、函数等
1.正则
1.1 判断是否包含数字
- 方法1:
function containsNumber(str) {
for (var i=0;i<10;i++) {
if(str.indexOf(i)!=-1){
return true;
}
}
return false;
}
- 方法2:转载。正则
function containsNumber(str) {
return /\d/.test(str);
}
1.2 检查重复字符串
- 给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str);
}
1.3 判断是否以元音字母结尾
- 方法1:
function endsWithVowel(str) {
var len = str.length;
switch (str[len - 1]) {
case 'a':
case 'o':
case 'i':
case 'e':
case 'u':
case 'A':
case 'O':
case 'I':
case 'E':
case 'U': return true;
default: return false;
}
}
- 方法2:转载。正则,集合:[a,e,i,o,u];以。。。结尾:$;不区分大小写:i
function endsWithVowel(str) {
return /[a,e,i,o,u]$/i.test(str);
}
1.4 获取指定字符串
- 给定字符串 str,检查其是否包含 连续3个数字
1、如果包含,返回最新出现的 3 个数字的字符串
2、如果不包含,返回 false - 方法1:亲测可以,牛客网不行!
function captureThreeNumbers(str) {
var nstr=[];
for(var i=0;i<str.length-2;i++){
if(typeof(+str[i])=='number'&& !isNaN(+str[i])){
if(typeof(+str[i+1])=='number'&& !isNaN(+str[i+1])&&typeof(+str[i+2])=='number'&& !isNaN(+str[i+2])){
nstr.push(+str[i],+str[i+1],+str[i+2]);
return nstr;
}
}
}
return false;
}
- 方法2:改进,亲测可以,牛客网不行!
function captureThreeNumbers(str) {
var nstr=[];
for(var i=0;i<str.length-2;i++){
if( isNumber(+str[i])){
if(isNumber(+str[i+1])&&isNumber(+str[i+2])){
nstr.push(+str[i],+str[i+1],+str[i+2]);
return nstr;
}
}
}
return false;
}
function isNumber(obj) {
return typeof obj === 'number' && !isNaN(obj)
}
- 方法3:转载。正则,match()返回的是正则表达式匹配的字符串数组,连续的三个任意数字用正则表达式表示为/\d{3}/。
function captureThreeNumbers(str) {
var arr = str.match(/\d{3}/);
if(arr)return arr[0];
return false;
}
1.5 判断是否符合指定格式
- 给定字符串 str,检查其是否符合如下格式
1、XXX-XXX-XXXX
2、其中 X 为 Number 类型 - 方法1: 亲测可以,牛客网不行
function matchesPattern(str) {
var s=0;
if (str[3] == str[7] && str[3] == '-') {
for (i = 0; i < str.length; i++) {
if (i != 3 && i != 7 && isNumber(+str[i])) {
s++;
}
}
}
if (s==str.length-2)return true;
return false;
};
function isNumber(obj) {
return typeof obj === 'number' && !isNaN(obj);
}
- 方法2:正则,转载。
本题需要注意格式,开头^和结尾$必须加上来限定字符串,3个数可表示为\d{3},4个数则为\d{4},
{n}表示前面内容出现的次数。正则表达式可写作/^\d{3}-\d{3}-\d{4}$/,有相同部分\d{3}-,
因此也可写作/^(\d{3}-){2}\d{4}$/
function matchesPattern(str) {
return/^(\d{3}-){2}\d{4}$/.test(str);
}
1.6 判断是否符合 USD 格式
- 给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3
function isUSD(str) {
return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
}
2. 小结
1.正则化有利于简化代码,判断字符串!
2.注意“存在”与“任何”的区别,前者满足条件即可return,如1.4;后者需要遍历所有字符,如1.5.