Javascript 使用JS解析字符串以提取几个特殊字符之间的单词

Javascript 使用JS解析字符串以提取几个特殊字符之间的单词,javascript,jquery,Javascript,Jquery,我有一个字符串,比如: lorem ipsum !bang #hash #hash2 ^caret word @at sym 我试着把以不同字符开头的单词拉出来——有时它们可以有空格,每种类型可以有多个。因此,我想将此字符串转换为一组值,例如: text: "lorem ipsum" !: "bang" #: ["hash", "hash2"] ^: "caret word" @: "at sym" 它总是以普通字符串开头。到目前为止,我已经尝试了一些方法,但都不太明白。例如,我尝试将字符串

我有一个字符串,比如:

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("@"));
它确实返回了带空格的插入符号单词,但没有考虑所有字符。我尝试用数组替换“@”,但没有成功

有什么办法可以做到这一点吗

非常感谢


编辑:请注意,不同的部分可以是任意顺序的,它们的数量也可以是任意顺序的,并且它们不一定都存在。所以可能是
ab!a#b#c#d^f b a@a
cd^x y!a

将显示各种类型的数据,即没有特殊字符,然后!,然后#,然后^,然后@总是按同样的顺序吗

洛雷姆·伊普苏姆!符号处的bang#hash#hash2^插入符号


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

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

var inputString=“lorem ipsum!bang#hash#hash2^插入字@at sym”;
var specialChars=“!#^@”;
var firstSpecialCharIndex=inputString.search(/[!#^@]);
var plainText=inputString.substring(0,firstSpecialCharIndex);
var result={};
结果[“文本”]=纯文本;
对于(i=firstSpecialCharIndex+1;i控制台日志(结果)所讨论的字符串是否始终具有相同的顺序,即“纯字符串!感叹词#散列词^插入词@at words”?还有其他符号吗?不,对不起,顺序可能不同,数量也可能不同,而且它们不一定都存在。所以可能是
ab!a#b#c#d^f b a@a
cd^x y!a
。不,对不起,订单可能会有所不同,数量也可能有所不同,而且不必全部到场。所以可能是
ab!a#b#c#d^f b a@a
cd^x y!a
。应该提到这一点,否则这种方法可能会起作用。但我想如果我试图在两者之间拉扯!还有#,它可能包含^或其他东西。哇,太棒了,谢谢!刚刚测试了几个变化,它的作品完美。将标记为答案:)欢迎@samiles。非常喜欢编写上述通用代码。谢谢……
:)