JS特定的搜索功能

时间:2016-05-25 21:02:05

标签: javascript jquery arrays regex search

嗨我在javascript基础知识方面有一些根源,但我正试图进入jquery,因为我认为它有更好的搜索系统或功能。无论哪种方式,我想要帮助的是创建一种搜索类型的搜索,它将扫描变量中包含的数据并使用它来使用构造函数自动创建对象。但是让我们从小做起。 我想弄清楚的一件事就是创建一个搜索功能,它可以识别我想要提取的单词或单词,然后存储到另一个变量中以供日后使用。

以下是我需要完成的一些视觉效果。

假设我有以下变量。

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

我需要扫描“textData”直到我到达字母Combos或标记如“AAx”,然后取下一个项目,数字“1”并将其存储到变量“name1”等等直到变量填写如下:

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

多一点解释。请注意,当识别出标记AAx,BBx和CCx时,后面的数字是记录/存储的数字。特别是数组“list1”,它继续存储数字,直到下一个元素不是一个数字,而是一个小于号的符号“&lt;”,类似于name1和name2的情况。

我在网上看过的js搜索教程的大多数例子都是在两个空格或单个字母数字/符号选择器之间处理一个完整的单词。我确定我需要做的是使用一个带有if语句的循环,它会找到“AAx”的第一个匹配,然后我就失去了如何编写将接收该标记的信息的代码,然后停在“&lt;”。然后继续下一个标记,BBx和CCx。 我感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我想这就是你要找的......我会在一个阵列中给你结果,由你决定其余部分。

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用的字符串函数

  1. Replace/xxx/g用于全局替换)
  2. Split
  3. 使用的数组函数

    1. forEach
    2. shift
    3. Map
    4. 数字函数

      1. Number ConstructormapNumber将每个项目转换为数字值)
      2. &#13;
        &#13;
        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);
        &#13;
        &#13;
        &#13;