如何在javascript中使用多个规则拆分字符串

如何在javascript中使用多个规则拆分字符串,javascript,string,split,Javascript,String,Split,例如,我有以下字符串: str = "my name is john#doe oh.yeh"; 我寻求的最终结果是这个数组: strArr = ['my','name','is','john','&#doe','oh','&yeh']; 这意味着有两条规则适用: 在每个空格“”后拆分(我知道怎么做) 如果有特殊字符(“.”或“#”)也可以拆分,但在带有特殊字符的单词前添加字符“&”。 我知道我可以用strArr=str.split(“”)作为第一条规则。但是我该怎么做另一个把

例如,我有以下字符串:

str = "my name is john#doe oh.yeh";
我寻求的最终结果是这个数组:

strArr = ['my','name','is','john','&#doe','oh','&yeh'];
这意味着有两条规则适用:

  • 在每个空格“”后拆分(我知道怎么做)
  • 如果有特殊字符(“.”或“#”)也可以拆分,但在带有特殊字符的单词前添加字符“&”。
  • 我知道我可以用strArr=str.split(“”)作为第一条规则。但是我该怎么做另一个把戏呢

    谢谢, 使用split()方法。这就是你需要的:

    嗯。我看到了,你找到了,我想:

    1) 首先使用拆分到空格
    2) 遍历数组,找到#或时在数组成员中再次拆分
    3) 再次遍历数组,找到
    str.replace(“#“,”&#“
    str.replace(“.”,“&”)
    时使用split()方法。这就是你需要的:

    嗯。我看到了,你找到了,我想:

    1) 首先使用拆分到空格
    2) 遍历数组,找到#或时在数组成员中再次拆分

    3) 再次遍历数组,并假设结果应该是
    '&doe'
    ,而不是
    '&doe'
    ,一个简单的解决方案是将所有
    替换为
    按空格分割的

    strArr = str.replace(/[.#]/g, ' &').split(/\s+/)
    
    /\s+/
    匹配连续的空格,而不仅仅是一个空格

    如果结果应该是
    '&#doe'
    '&.yeah'
    使用相同的正则表达式并添加捕获:

    strArr = str.replace(/([.#])/g, ' &$1').split(/\s+/)
    

    假设结果应该是
    '&doe'
    而不是
    '&doe'
    ,一个简单的解决方案是将所有
    替换为按空格分割的
    &

    strArr = str.replace(/[.#]/g, ' &').split(/\s+/)
    
    /\s+/
    匹配连续的空格,而不仅仅是一个空格

    如果结果应该是
    '&#doe'
    '&.yeah'
    使用相同的正则表达式并添加捕获:

    strArr = str.replace(/([.#])/g, ' &$1').split(/\s+/)
    

    必须使用正则表达式,才能同时匹配所有特殊字符。我想你说的“特别”是指“没有字母”

    var模式=/([^a-z]?)[a-z]+//gi;//图案
    var str=“我的名字是约翰#多伊哦,耶”//输入字符串
    var strArr=[],匹配;//输出数组,临时变量
    
    虽然((match=pattern.exec(str))!==null){/您必须使用正则表达式,以便一次匹配所有特殊字符。通过“特殊”,我假定您的意思是“没有字母”

    var pattern=/([^a-z]?)[a-z]+//gi;//pattern
    var str=“我的名字是john#doe oh.yeh”//输入字符串
    var strArr=[],match;//输出数组,临时变量
    
    而((match=pattern.exec(str))!==null){/我认为split()和replace()的组合是您需要的:

    str = "my name is john#doe oh.yeh";
    
    strArr = str.replace('\W',' &');
    
    strArr = strArr.split(' '); 
    

    这应该与您所要求的接近。

    我认为split()和replace()的组合是您想要的:

    str = "my name is john#doe oh.yeh";
    
    strArr = str.replace('\W',' &');
    
    strArr = strArr.split(' '); 
    
    这应该与您所要求的接近。

    这是有效的:

    array = string.replace(/#|\./g, ' &$&').split(' ');
    
    请看这里的演示:

    此功能:

    array = string.replace(/#|\./g, ' &$&').split(' ');
    

    看看这里的演示:

    应该是
    '和#doe'
    还是
    '和doe'
    ?你有
    '和
    ,而不是
    '和.yeh'
    。你希望有那些“特殊字符”吗作为输入的一部分,或者它们中的任何一个都不可能出现一次?可能重复的@outis你错过了第二部分了吗?@RobW:没有,但这确实是两个问题,第一个问题已经被问过了。目前正在寻找第二个问题中的另一个。应该是
    ”和#doe'
    还是
    '&doe'
    ?你有
    '&yeh'
    而不是
    “&.yeh”
    。你是否希望这些“特殊字符”作为输入的一部分,或者它们中的任何一个都不会出现一次?可能是@outis的重复。你错过了第二部分了吗?@RobW:没有,但这确实是两个问题,第一个问题已经被问过了。目前正在寻找第二个问题中的另一个。