在最后一个元音字符后,要附加“”;xy”;

After last vowel character, want to attach "xy"

本文关键字:xy 最后一个 字符      更新时间:2023-09-26

我的应用程序要求是,如果一个单词有一个像"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)