字符替换无效,输出接近预期输出

时间:2019-01-16 21:06:05

标签: javascript

我有一个脚本(我是从另一个堆栈溢出用户那里获得的),我对其进行了稍微修改,由于某种原因(我找不到),该脚本输出了一些不同的东西。 (请不要运行,因为您的计算机运行缓慢: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'。有谁知道为什么会这样,或者如何解决?

1 个答案:

答案 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.

第二个选项要好一些,因为它的格式正确(第一个单词的开头为',最后一个单词的结尾为')。