我有一个10万多个英文单词的纯文本列表。我想使用split()
将列表转换为数组,然后我可以将其转换为关联数组,为每个列表项提供与其自身名称相等的键,这样我就可以非常有效地检查字符串是否是英语单词。
问题来了:
列表用新行分隔。
aa
aah
aahed
aahing
aahs
aal
aalii
aaliis
aals
这意味着var list = ' <copy/paste list> '
不工作,因为JavaScript引号不工作多行。
是否有任何方法让我与这100,000项新行分隔字符串工作?
将文本编辑器中的换行符替换为逗号,然后再复制到js文件
一种解决方法是将列表粘贴到notepad++中。然后全选,编辑>线路操作>线路连接。
删除新行并用空格替换它们。
如果您在客户端执行此操作,您可以使用jQuery的get
函数从文本文件中获取单词并在那里进行处理:
jQuery.get('wordlist.txt', function(results){
//Do your processing on results here
});
如果你在Node.js中这样做,遵循这里的指南来了解如何将文件读入内存。
您可以使用notepad++或任何半高级的文本编辑器。
-
打开notepad++,按Ctrl+H弹出替换对话框
-
在底部,选择"扩展"搜索模式
-
你想找到"rn"并将其替换为","
这将删除换行符并用逗号代替
jsfiddle Demo
解决这个问题纯粹是有一个字符串,并试图通过复制粘贴在JavaScript中使用它。特别是关于""的问题,这意味着var list ="将不起作用,因为JavaScript引号不能多行工作。"one_answers"我是否有办法处理这100,000项新行分隔的字符串?".
在JavaScript注释中,你可以像对待字符串一样对待字符串。虽然违反直觉,但这是一个有趣的方法。下面是main函数
function convertComment(c) {
return c.toString().
replace(/^[^/]+/*!?/, '').
replace(/*/[^/]+$/, '');
}
它可以在你的情况下使用:
var s = convertComment(function() {
/*
aa
aah
aahed
aahing
aahs
aal
aalii
aaliis
aals
*/
});
此时,您可以对s做任何您喜欢的事情。演示只是将它放入div中用于显示。
jsFiddle Demo
此外,下面是一个获取单词列表的示例,将它们放入数组中,然后引用数组中的单个单词。
//previously shown code
var all = s.match(/[^rn]+/g);
var rand = parseInt(Math.random() * all.length);
document.getElementById("random").innerHTML = "Random index #"+rand+": "+all[rand];
如果单词在一个单独的文件中,您可以直接将它们加载到页面中,然后从那里开始。我使用了一个MIME类型的脚本元素,这意味着浏览器会忽略内容(如果它在头部):
<script type="text/plain" id="wordlist">
aa
aah
aahed
aahing
aahs
aal
aalii
aaliis
aals
</script>
<script>
var words = (function() {
var words = 'n' + document.getElementById('wordlist').textContent + 'n';
return {
checkWord: function (word) {
return words.indexOf('n' + word + 'n') != -1;
}
}
}());
console.log(words.checkWord('aaliis')); // true
console.log(words.checkWord('ahh')); // false
</script>
结果是一个具有checkWord方法的对象,该方法可以访问闭包中的单词列表。你可以添加更多的方法,比如addWord或者addVariant等等。
注意,并非所有浏览器都支持textContent,您可能需要特性检测并使用innerText或其他替代方法。
为了多样化,另一种解决方案是将未更改的内容放入
- 一个数据属性——HTML属性可以包含换行符
-
或"非脚本"脚本-例如。
<SCRIPT TYPE="text/x-wordlist">
- 或一个HTML注释节点
- 或另一个允许内容 的隐藏元素
然后可以读取和拆分/解析内容。由于这将在JavaScript的字符串文本解析之外完成,因此不存在关于嵌入换行符的问题。