在最后一个元音字符后,要附加“”;xy”;
After last vowel character, want to attach "xy"
我的应用程序要求是,如果一个单词有一个像"anupam"这样的元音,那么在它的最后一个元音后面加上"xy"。因此,它的结果应该是"anupxy"。但如果一个单词中有两个元音继续,那么它应该是这样的:
Oa = Oaxy
and au = auxy
Gardenhire = Gardxy
Parker = Parkxy
Arney = Arnxy
There are 4 rules.
1. The name cuts off at the second vowel and is replaced by 'xy.'
2. connected vowels count as a single and should stay together.
3. EXCEPTION: when the last letter is 'x' another 'x' is not added.
4. Names with only two connected vowels should have "xy" added to the end
我不知道我的错误在哪里,我的代码是:
function doit(userName) {
var temp = userName.toLowerCase();
var vowels = "aeiouy"
var count = 0;
if(userName) {
for(var i=0; i<temp.length; i++) {
if( vowels.indexOf(temp.charAt(i)) > -1 ) {
count++;
if(count==1) {
while( vowels.indexOf(temp.charAt(++i)) != -1 );
i--;
} else
break;
}
}
userName = userName.substr(0, i);
if( userName.charAt(userName.length-1) == 's' )
userName += "y";
else
userName += "sy";
} else
userName = 'Take a lap, Dummy';
return userName.toUpperCase();
}
正则表达式是最好的选择。
var word = "anumap";
var transformed = word.replace(/('w+[aeiou]+).*/i, " $1xy");
我创建了一个交互式小提琴:http://jsfiddle.net/53qH6
"''w+"表示匹配任何单词字符。这将得到最后一个元音之前的所有字母。括号中的[]和元音是我们要找的,括号外的+表示必须至少有一个元音。".*"的意思是匹配后面的任何单词(最后一个元音之后的任何单词)括号表示将其捕获到一个变量中($1)。
我建议您使用正则表达式,尤其是在使用解释语言时。更简单的代码,可能还有更好的性能。参见:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
http://www.regular-expressions.info/javascript.html
如下:
function doit(userName) {
var str = userName || "";
var vowels = ["a","e","i","o","u"];
var suffix = "xy";
var str_arr = str.split("");
var str_arr_rev = str_arr.reverse();
$.each(str_arr_rev, function (i, item) {
if ($.inArray(item.toLowerCase(), vowels) > -1) {
last_vowel_index = i;
return false;
}
});
if (last_vowel_index == -1) {
$.each(str_arr_rev, function (i, item) {
if (item.toLowerCase() == "y") {
last_vowel_index = i;
return false;
}
});
}
if (last_vowel_index > -1)
str_arr_rev[last_vowel_index] = str_arr_rev[last_vowel_index] + suffix;
return str_arr_rev.reverse().join("");
}
不确定需求的第二部分
但如果一个单词中有两个元音继续,那么它应该是这样的:
Oa = Oaxy and au = auxy -Anup
试试这个图案
html
<input type="text" value="" /><br />
<div id="name"></div>
js
编辑
原始工件没有将"anupam"转换为"ANUPAXY",regex
es可能仍使用调整
$(function () {
$("input").on("change", function(e) {
$("#name")
.html(function (index, o) {
var v = /[aeiou]+.$/gi;
var o = $(e.target).val();
var n = v.test(o);
return (n ? String(o.replace(/[^aeiou]$/gi, "") + "xy").toUpperCase() : o)
});
});
})
jsfiddlehttp://jsfiddle.net/guest271314/nB9Qc/
另请参见
这是查找所有大写辅音的最短javascript正则表达式吗?
如何否定正则表达式中的特定单词?
在特定单词后中断字符串,并将剩余部分放在新行(Regex)
- 表追加而不附加最后一个元素
- 无法在Ionic select中预先选择最后一个选项
- 为什么画布形状只在3个画布中的最后一个画布上渲染
- Jquery append oly获取循环Rails中的最后一个elemen
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 多维关联数组的最后一个索引
- 无法获取vis.js最后一个或第一个选定的网络节点
- 循环以检查数组中的最后一个图像
- 从输入值中删除最后一个单词
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 如何从多个复选框中获取最后一个值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 使用querySelector()获取最后一个td元素
- Foreach循环只返回最后一个值
- 通过将6个月添加到今天来获得最后一个月的日期's日期
- 如何使用JavaScript forloop从JSON中删除最后一个逗号
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 在最后一个元音字符后,要附加“”;xy”;