使用JS解析字符串以在几个特殊字符之间拉出单词

时间:2016-06-14 08:50:51

标签: javascript jquery

我有一个字符串:

lorem ipsum !bang #hash #hash2 ^caret word @at sym

我试图从各种字符开始拉出单词 - 有时它们可​​以有一个空格,每种类型可以有多个。所以我想将这个字符串转换为一组值,例如:

text: "lorem ipsum"
!: "bang"
#: ["hash", "hash2"]
^: "caret word"
@: "at sym"

它总是以纯字符串开头。到目前为止,我已经尝试了一些东西,但不能完全理解。例如,我尝试将字符串拆分为一个单词数组,除了空格之外还有哪些作用:

var list = str.split(' ');

var hashes=[];
$.each(list,function(i,val){
    if(list[i].indexOf('#') == 0){
      hashes.push(tagslistarr[i]);  
    }
});

//Result: [hash, hash2]

所以这有效,但显然有些人可以有空格。它还意味着为每个^ # ! @重复该代码。

我也尝试过:

str.substring(str.lastIndexOf("^")+1,str.lastIndexOf("@"));

哪个会正确返回caret word空格,但未考虑所有字符。我尝试用数组替换“@”,但没有运气。

关于如何实现这一目标的任何想法?

非常感谢

编辑:只是注意到各个部分可以按任何顺序排列,也可以是它们的数量,并且它们并非都必须存在。可以是ab !a #b #c #d ^f b a @acd ^x y !a

2 个答案:

答案 0 :(得分:2)

请看下面的JS代码。希望它能帮助你实现目标。

"use strict";
var moduleA = require("./moduleA");
new moduleA.Car();

// equivalent to the above - import everything under myModuleName
var myModuleName = require('./moduleA');
new myModuleName.Car();

// import only the Car class
var moduleA_1 = require('./moduleA');
new moduleA_1.Car();

// import only the Car class and alias it as MyCar
var moduleA_2 = require('./moduleA');
new moduleA_2.Car();

答案 1 :(得分:0)

各种类型的数据,即没有特殊字符,然后是#,然后是^,那么@总是处于相同的顺序吗?

lorem ipsum!bang #hash #hash2 ^ caret word @at sym

如果是这样,你可以为每种类型的数据编写一个提取函数,它使用边界字符来检测单词部分,例如,如果你想要发出爆炸,你检测到!的位置,然后检测位置#。然后,您可以知道数据的边界位置,提取数据并清理以获取单词。对于#部分,你从#的位置到^的位置,提取部分并清理以获得单词等。