我有一个脚本(我是从另一个堆栈溢出用户那里获得的),我对其进行了稍微修改,由于某种原因(我找不到),该脚本输出了一些不同的东西。 (请不要运行,因为您的计算机运行缓慢:github文件包含超过350000个单词)
const url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt';
fetch(url).then(d => d.text()).then(d => d.replace(/\s/g, '')).then(d => d.replace(/\n/g, ' ')).then(d => d.replace(/\s/g, "', '"));
输出示例为'aardvark', '', 'apple'
(仅作为示例),应为'aardvark', 'apple'
。有谁知道为什么会这样,或者如何解决?
答案 0 :(得分:1)
首先,运行d.replace(/\s/g, '')
将删除d
中的所有空格和换行符,因此,我假设您的意思是d.replace(/ /g, '')
。
似乎文件中每个单词后都有3个连续的空格字符,这意味着第一个replace
只会删除一个空格。要解决此问题,您可以使用取反来统一第一和第二replace
:
const url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt';
fetch(url)
.then(d => d.text())
.then(d => d.replace(/[^\n]\s/g, ''))
.then(d => d.replace(/\s/g, "', '"))
.then(console.log);
//=> Should print out the words in the expected format.
上面代码的原因是,第一个replace
删除了所有空格(不是换行符),第二个空格将每个换行符替换为', '
。
一种使此方法更具可读性和鲁棒性的方法是使用.split
而不是.replace
:
const url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt';
fetch(url)
.then(d => d.text())
.then(d => d.split(/\s+/g))
.then(d => d.map(word => `'${word}'`))
.then(d => d.join(', '))
.then(console.log);
//=> Should still print out the words correctly.
第二个选项要好一些,因为它的格式正确(第一个单词的开头为'
,最后一个单词的结尾为'
)。