正则表达式,Spoonerisms和我最喜欢的使用JavaScript学习新事物的方式🥄

我是进行愚蠢的编码副项目的主要倡导者,以减少学习新事物的过程。 对我来说,这通常需要一些胡说八道的文字游戏。 最好的/最糟糕的朋友:正则表达式! 而且,如果您像我一样,甚至在风中遥远地提及正则表达式会让您感到压力大,那么不要惊慌,因为我将详细解释所有内容,并且一切都会很好玩。

a什么是琵琶音乐?

也许我有点超越自己,首先让我们做些背景。 我确信有些人已经知道了,勺子主义是一种口头错误,即有人不小心在两个单词短语的前两个声音之间切换。 童谣中有一个特别著名的“勺子”,“她在海边卖贝壳”,“她卖”是“贝壳”的勺子。 这个愚蠢的名字是由一个人创造的

1898年名利场展览中的勺子

威廉·阿奇博尔德·斯彭纳(William Archibald Spooner),牛津大学的老将,他经常犯这种错误,导致出现诸如“脸红的乌鸦”(源自“压碎的打击”),“马尔登·我·帕多姆”(源自“对不起的女士”)的短语。 他是白化病患者,患有视力和阅读障碍,这可能是他著名的汤匙主义的重要原因。 他被形容为“兔子般的”,而且心不在somewhat。现在-尽管我偶然地做出了相当多的指压主义,但我确实有意寻找娱乐性的人。 如果可以让我的电脑为我找到它们,那就更好了!

regular什么是正则表达式,为什么我们要使用它们?

如果您了解正则表达式的概念和基本用例,请随时跳过此部分。

正则表达式(或简称regex)是计算机遵循以匹配指定字符串段的模式。 好的,这有点罗word,就我个人而言,我在示例方面做得更好,因此让我们看一下最简单的用例。 让我们将正则表达式匹配到一个字母,然后对该字母进行一些处理。

这段代码不太起作用

然后控制台打印:

这幅画怎么了?

因此,我们可以看到它与第一个’e’匹配并被替换,但没有其他替换,这是因为默认情况下,正则表达式会在它们获得的第一个匹配处停止。 为了改变这种行为,我们必须在正则表达式的声明中添加所谓的“修饰符”。 在regex声明中的第二个反斜杠之后添加修饰符。 我们的新代码如下所示:

匹配到“ e”的每个实例

好极了! 有用

那如果我们想匹配所有但’e’呢? 为此,我们将使用所谓的元字符。 通常将元字符与其他字符结合使用以更改其行为。 由于正则表达式的用途非常广泛,所以这些字符的数量非常丰富,但是我们现在要看的是尖号。 (这个小家伙➡ ^ )

我不太清楚为什么我们必须将^ e放在方括号中。 如果您知道,请留下回应!

正如预期的那样,我们的控制台会打印出一串难看的大写字母和小写字母e。

您不希望我选一个更好的例子吗?

正则表达式运算符和特殊字符太多了,在这里列出它们几乎是没有用的。 这本应该是对正则表达式的有用性的介绍,并且可以说明,如果您专注于期望的结果,那么任务就不会那么艰巨了。 没有人知道每一个正则表达式的规则和特征,因为有太多的东西要记住。

与严格记住事情相比,知道什么是可能的以及如何在正确的时间找到正确的工具更为重要。 用大脑而不是手指来编码。

plan计划。

因此,最终的结果是让我的计算机从预先生成的短语列表中向我吐痰。

乍一看,显然我们将需要:

a)两个单词短语的大量清单

b)一种将它们读入数组的方法

c)接受两个单词的短语并返回该短语的拼音的函数

d)可能会有一些文字转语音的哈哈系数

)A)短语列表

我只是在谷歌上键入“两个单词短语”,然后单击第一个结果。

哇,谢谢互联网

因此,我将所有短语复制并粘贴到我正在使用的存储库中的文本文件中。

)b)将它们读入数组

首先,让我们将文件打印到控制台,以便我们可以看到正在使用的文件。 我不会在代码的这一部分上花费太多时间,因为这并不是我要在该项目中实践的东西。

有关使用节点文件系统读取和写入文件的更多信息,请访问https://www.tutorialspoint.com/nodejs/nodejs_file_system.htm

因此,现在我们有了列表,但是我们只剩下整整一堆的东西,我们需要将其读入数组,因此让我们在每个新行处拆分列表以隔离每个短语:

.split()也以数组形式返回!

现在我们可以轻松地对其进行突变,我要做的第一件事就是摆脱讨厌的双引号,数字和句点。 现在我们知道一些正则表达式基础知识,让我们充分利用它们。

这个正则表达式删除了所有不是字母的字符:

类似地,您可以执行Regex = / [0–9] / g以匹配所有数字

我们已经关闭,但是我们不小心切出了所有空格和所有大写字母。

不是理想的控制台

要解决空间问题,我们可以使用另一个元字符,并且可以使用修饰符来解决大写问题。 与JavaScript中的or运算符相似,正则表达式中包含or字符。 正则表达式的默认行为是“区分大小写”,这就是为什么它与我们的大写字母匹配的原因。 因此,通过新的更改,我们的正则表达式如下所示:

“ \ s”字符被读为空格,“ |”字符是or运算符,最后的“ i”是不区分大小写的修饰符。 因此,我们的正则表达式说:“无论大小写如何,我都将查看您给我的所有内容,并找到不包含字母或空格的所有内容。”最后是光荣的控制台:

🥄c)一个函数,该函数接受一个短语并返回一个拼音

之前我们使用过string.split()来将每个短语分解为每行新行的数组索引,以便我们可以分别操作每个短语。 我们可以在这里做同样的事情,但是用换行将其分开。 将每个单词绑定到一个变量后,其余的功能很容易说明。 减去每个单词的第一个字母,并用相反单词的第一个字母替换,然后将两个单词彼此附加在一起返回:

🥄d)庆祝活动!

如果您要将其复制并粘贴到文本到语音生成器中,则可以在以下URL上找到所有这些代码以及完整的竖向拼写列表:https://repl.it/@jamisonTitan/Spoonerizer随意,我强烈推荐。 最终,我们在这里没有任何帮助。 没有公司会雇用我,因为我的代码会转换字母,但是我只阅读正则表达式的文档很无聊,而不是那种刻在记忆中的下午(如果您确实记得所有信息,我会羡慕您的-您阅读的文档的密密麻麻的页面。)一个成功的下午,使愚蠢的文字游戏确实留在我的记忆中,两者都会教给您一些知识,所以我对您说继续! 以知识的名义做愚蠢无用的项目!

(或不,不管。随便你做什么)