如何编写一个函数,将句子中每个单词开头的所有辅音字符串转换为“r”,直到它变成元音?
Posted
技术标签:
【中文标题】如何编写一个函数,将句子中每个单词开头的所有辅音字符串转换为“r”,直到它变成元音?【英文标题】:How do I write a function that converts all consonant strings at the start of each word in a sentence into an "r" until it runs into a vowel? 【发布时间】:2018-07-21 00:20:26 【问题描述】:史酷比挑战
您需要编写一个替换所有辅音的函数 单词的开头,直到它遇到带有“r”的元音。为了 例如,单词“scooby”会变成“rooby”,而“xylophone”会 变成“rophone”
这是我正在使用的功能,但它只对我句子中的一个单词起作用。我怎样才能让它对每个单词都起作用。
function scooby_doo ()
if (text.value.length == 0)
result.value = "no input given!";
else if (text.value.length > 0)
var set = text.value.split(" ");
for (i = 0; i < set.length; i++)
result.value = set[i].replace (/^[^aeiou]+/i, "r");
else
result.value = "";
return;
【问题讨论】:
result.value += " " + 你的东西,在 result.value ="" 您的问题不清楚result
是什么text
是什么,是否涉及任何 html,您应该在寻求紧急解决方案之前添加一套完整的要求
【参考方案1】:
我相信你可以在没有显式循环的情况下实现这一点:
str = 'scooby doo loves his xylophone show';
str.replace(/(^| |\n)[^aeiou]+/ig, '$1r');
// outputs "rooby roo roves ris rophone row"
这是您要寻找的输出吗?
【讨论】:
那里有很棒的正则表达式。 而不是^| |\n
,为什么不只是\b
?这也将避免需要使用$1
。
是的,这也可以使用,但如果你只这样做,这些词就会全部粘在一起,比如“roobyroorovesrisrophonerow” 可能稍微调整一下就可以使用。
@FelipeNMoura 我已经接受了你的回答。这是一个地狱般的正则表达式。你能告诉我你是怎么做到的吗?这是如何运作的。谢谢。
当然,这个想法是(^| |\n)
组(请记住,()
之间的所有内容都已分组)将查找以下任何内容之一: - 字符串的开头 - 一个空格- 换行符 (\n
) 如果有任何匹配的内容,它将“然后”在匹配组之后查找不是元音 [^aeiou]
的任何内容。加号表示可能有更多字符。之后,我用匹配组(新行或空格)和字母r
替换这些匹配项。 /ig
表示不区分大小写,可以在同一个字符串中多次匹配。【参考方案2】:
我认为在您的代码中,您在使用时会覆盖之前的值:
result.value = set[i].replace ( /^[^aeiou]+/i, "r" );
我不知道result
的类型,但你可以试试这个解决方案:
function scooby_doo (text)
var result = [];
if ( text.length == 0 )
return 'no input given';
else if ( text.length > 0 )
var set = text.split ( " " );
for ( i = 0; i < set.length; i++ )
result.push(set[i].replace ( /^[^aeiou]+/i, "r" ));
else
return '';
return result.join(' ');
console.log('scooby xylophone')
:
"rooby rophone"
【讨论】:
以上是关于如何编写一个函数,将句子中每个单词开头的所有辅音字符串转换为“r”,直到它变成元音?的主要内容,如果未能解决你的问题,请参考以下文章