有什么办法让我工作与这100,000项新行分隔字串

  • 本文关键字:000项 新行 分隔 工作 javascript
  • 更新时间 :
  • 英文 :


我有一个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++或任何半高级的文本编辑器。

  1. 打开notepad++,按Ctrl+H弹出替换对话框

  2. 在底部,选择"扩展"搜索模式

  3. 你想找到"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或其他替代方法。

为了多样化,另一种解决方案是将未更改的内容放入

  1. 一个数据属性——HTML属性可以包含换行符
  2. "非脚本"脚本-例如。<SCRIPT TYPE="text/x-wordlist">
  3. 一个HTML注释节点
  4. 另一个允许内容
  5. 的隐藏元素

然后可以读取和拆分/解析内容。由于这将在JavaScript的字符串文本解析之外完成,因此不存在关于嵌入换行符的问题。

最新更新