【问题标题】:JS specific search functionJS特有的搜索功能
【发布时间】:2016-05-25 21:02:05
【问题描述】:

您好,我对 javascript 基础有一定的了解,但我正在尝试使用 jquery,因为我认为它具有更好的搜索系统或功能。无论哪种方式,我想要帮助的是创建一种搜索类型,它将扫描包含在变量中的数据并使用它使用构造函数自动创建对象。但让我们从小处着手。 我想要弄清楚的具体事情是创建一个搜索功能,该功能将识别我想要提取的一个或多个单词并将其存储到另一个变量中以供以后使用。

这是我需要做的一点视觉。

假设我有以下变量。

textData = "&@^%! $%)#AAx1<# >^$(!($< BBx2<((@!^@(#^%))CCx24 33 80<#%#* ";
var name1;
var name2;
var list1[];

我需要扫描“textData”,直到找到字母组合或诸如“AAx”之类的标记,然后取出下一项,数字“1”并将其存储到变量“name1”等等直到变量填充如下:

name1 = 1;
name2 = 2;
list1 = [24, 33, 80];

多一点解释。请注意,当标记 AAx、BBx 和 CCx 被识别时,随后的数字就是记录/存储的数字。特别是数组“list1”,它继续存储数字,直到下一个元素不是数字,而是一个小于号“

我在网上看到的大多数 js 搜索教程示例都处理两个空格或单个字母数字/符号选择器之间的整个单词。我确定我需要做的是使用带有 if 语句的循环,该语句将找到“AAx”的第一个匹配项,然后我不知道如何编写代码来获取该标记之后的信息,然后停在“

【问题讨论】:

  • jQuery 用于 DOM 元素、对象、数组选择/操作,而不是从字符串中解析数据。
  • 谢谢帕特里克。我开始意识到这一点。我还在学习。

标签: javascript jquery arrays regex search


【解决方案1】:

使用的字符串函数

  1. Replace/xxx/g 用于全局替换)
  2. Split

使用的数组函数

  1. forEach
  2. shift
  3. Map

数字函数

  1. Number ConstructormapNumber 将每个项目转换为数值)

var string = "&@^%! $%)#AAx16<# >^$(!($< BBx2<((@!^@(#^%))CCx24 33 80<#%#*&@^%! $%)#AAx16<# >^$(!($< BBx2<((@!^@(#^%))CCx24 34 81<#%#*&@^%! $%)#AAx16<# >^$(!($< BBx2<((@!^@(#^%))CCx24 35 82<#%#*"; 
var result = [];
//Result: TOParray = [ [16, 2, [24,33,80]] [16, 2, [24,33,80]] [16, 2, [24,33,80]] ];
var arr = string
    .replace(/AA/g, '<CUTHERE>AA')//set markers to cut
    .split('<CUTHERE>');//split at each marker
arr.shift();//remove first element which doesnt have any value
arr
    .forEach(function(item){//iterate through each element
        var a = +/AAx(\d+)*/.exec(item)[1];//get number followed by AAx
        var b = +/BBx(\d+)*/.exec(item)[1];//get number followed by BBx
        var c = /CCx([\d\s]+)*/.exec(item)[1].split(" ").map(Number);//get number and spaces followed by BBx and split it at spaces and convert them to number
        result.push([a,b,c]);//push these to result array 
    });

console.log(result);

【讨论】:

  • thnx 但你能帮我做另一部分吗?我如何通过字符串循环它?这意味着 AAx BBx 和 CCx 标记在整个文本中按顺序重复。假设该行要复制和粘贴 3 次,那么我将如何将其放入包含嵌套数组的数据集的数组中。这样的字符串 = "&@^%!$%)#AAx16^$(!($^$(!($^$(!($
  • 谢谢。我可能还需要更长的时间才能真正理解使用快捷方式创建表达式的艺术,但你的脚本很有帮助。非常感谢。
  • @theUnlearned 这里没有捷径,我会添加不同功能的链接供大家注意。
【解决方案2】:

我想这就是你要找的东西......我会在一个数组中给你结果,剩下的由你来决定。

var r = /([A-Z])\1x([\d\s]+)/g,
    s = "&@^%! $%)#AAx1<# >^$(!($< BBx2<((@!^@(#^%))CCx24 33 80<#%#* ",
    m = [];
    
while (m[m.length] = r.exec(s));
m.length--;
m = m.map(e => e[2].split(" ").map(e => e*1));

console.log(JSON.stringify(m));

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多