1,匹配一个字符串(由多个单词组成,可能是一段话)中第一个首字母大写,其他字母为小写的单词
例如"aSaa  r5as  Aesa  (Asw)  sss  sAA  Yaa   SaT" 匹配结果为["Aesa","Yaa"]
2,匹配一个字符串(由多个单词或特殊符号组词)中所有最后一个字符为点(.)的单词
例如 "aaa  bbb  ccc.  ddd  ee.  fff.  rrr  t.tt" 匹配结果为 ["ccc.","ee.","fff."]
3,匹配一个字符串(由多个单词,其中有些单词带括号)中所有括号中的单词
例如 "aaa  bbb  ccc  (ddd)  eee  fff  r(rr)aa  ttt" 匹配结果为"(ddd)"
4,匹配一个字符串(由多个单词或特殊符号组词)中第一个出现的首字母为大写,且其他字母为小写的单词,和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词。
例如 "wes  Aes  (sss)  ttt  ddd  vs.  Sws  rrr  yts." 匹配结果为["Aes", "ttt", "ddd" ,"vs." ,"rrr","yts." ]

解决方案 »

  1.   

    第4介为什么不匹配wes  
      

  2.   

    alert("aSaa  r5as  Aesa  (Asw)  sss  sAA  Yaa   SaT".match(/(\s|^)[A-Z][a-z]+(?=\s|$)/g));alert("aaa  bbb  ccc.  ddd  ee.  fff.  rrr  t.tt".match(/(\s|^)[a-z]+\.(?=\s|$)/ig));alert("aaa  bbb  ccc  (ddd)  eee  fff  r(rr)aa  ttt".match(/(\s|^)\([a-z]+\)(?=\s|$)/ig));var str4 = "wes  Aes  (sss)  ttt  ddd  vs.  Sws  rrr  yts.";
    alert([str4.match(/(\s|^)[A-Z][a-z]+(?=\s|$)/)[0]].concat(str4.match(/(\s|^)[a-z\.]+(?=\s|$)/g)));
      

  3.   

    %[A-Z][a-z]+^
    %\w*\.^
    %(\w*)^
    第四个不会
      

  4.   


    谢谢老师。除了最后一个之外都可以了。另外还有一个比较复杂的,老师能帮忙看一下吗?先看匹配得到的结果(1,2,3分别是匹配的步骤)
    原字符串:Lilium brownii var. viridulum Baker
    结果为
    1)Lilium
    2)Lilium brownii
    3)Lilium brownii var. viridulum原字符串:Clintonia alpina (Trautv. et C. A. Mey.) J. F. Macbr. var. geniculatum W. T. Wang
    结果为
    1)Clintonia
    2)Clintonia alpina
    3)Clintonia alpina var. geniculatum原字符串:Cirsium bolocephalum (Rothm.) Holub var. setchwanicum Petr. ex Hand.-Mazz. f. glaucum Ching
    结果为
    1)Cirsium
    2)Cirsium bolocephalum
    3)Cirsium bolocephalum var. setchwanicum
    4)Cirsium bolocephalum var. setchwanicum f. glaucum规则
    第一步:从左到右,匹配第1个大写字母打头的单词(第一个单词肯定大写),作为结果的第一项
    第二步:从头开始匹配,在上面获取结果的基础上,获取第一个小写字符打头,且不包含字符左括号(、右括号)、&的单词,并与上面的结果合并为一个单词
    第三步:重复第二步
    .........:重复第二步
    直至整个原字符串匹配完毕另外,如果匹配项的结尾以var.或其他以.结尾的单词,要将其去掉。
      

  5.   

    第四个
    alert(["wes  Aes  (sss)  ttt  ddd  vs.  Sws  rrr  yts.".match(/(\s|^)[A-Z][a-z]+(?=\s|$)/)[0]].concat(RegExp.rightContext.match(/(\s|^)[a-z\.]+(?=\s|$)/g)));
      

  6.   

    如果匹配项的结尾以var.或其他以.结尾的单词,要将其去掉
    既然有上面这个限制了,为什么步骤里面还有包含这些字符
      

  7.   


    最后得到的结果字符串,结尾是var.(或其他英文字符加点)的,要去掉
    字符串中间的var.不去
      

  8.   

    第五个:function filterWord(text){
    let isFirst=true;
    let arr=text.split(/\([^()]*\)|\s+/);
    return arr.filter(function(item,index){
    if(index===arr.length-1){
    return /^[a-z]+$/.test(item);
    }
    if(isFirst){
    isFirst=false;
    return /^[A-Z][a-z]*$/.test(item);
    }
    return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
    }).join(' ');
    }
      

  9.   


    谢谢老师。
    Clintonia alpina (Trautv. et C. A. Mey.) J. F. Macbr. var. geniculatum W. T. Wang
    括号里的字符都不能要,et 在结果里是不能有的
    另外,结果里不能包含字符串 ex
    Cirsium bolocephalum (Rothm.) Holub var. setchwanicum Petr. ex Hand.-Mazz. f. glaucum Ching
    结果是
    Cirsium bolocephalum var. setchwanicum f. glaucum
    请老师再帮忙看一下
      

  10.   

    et如果也不需要的话,你就把[xX]改为[xXtT]就可以了
      

  11.   

    et如果也不需要的话,你就把[xX]改为[xXtT]就可以了还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
    比如输入Cirsium,现在的结果是不匹配的
      

  12.   

    Test test var. j. ex.  应匹配Test test 后面带点的都不要,现在的结果是Test test var. j. 
      

  13.   

    alert("aSaa  r5as  Aesa  (Asw)  sss  sAA  Yaa   SaT".match(/(\s|^)[A-Z][a-z]+(?=\s|$)/g));alert("aaa  bbb  ccc.  ddd  ee.  fff.  rrr  t.tt".match(/(\s|^)[a-z]+\.(?=\s|$)/ig));alert("aaa  bbb  ccc  (ddd)  eee  fff  r(rr)aa  ttt".match(/(\s|^)\([a-z]+\)(?=\s|$)/ig));var str4 = "wes  Aes  (sss)  ttt  ddd  vs.  Sws  rrr  yts.";
    还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
    比如输入Cirsium,现在的结果是不匹配的
      

  14.   

    1.                    "\\b[A-Z][a-z]*\\b"
    2.                    "\\w*\\.\\B"
    3.                   "\\B\\([a-zA-z-]*\\)\\B"
    4.                   题目都看了好几遍,有点绕,再研究一下.
      

  15.   

    4,匹配一个字符串(由多个单词或特殊符号组词)中第一个出现的首字母为大写,且其他字母为小写的单词,和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词。
    例如 "wes  Aes  (sss)  ttt  ddd  vs.  Sws  rrr  yts." 匹配结果为["Aes", "ttt", "ddd" ,"vs." ,"rrr","yts." ]
    第一个出现的         (首字母为大写,且其他字母为小写的单词)   那不就是匹配到Aes,  Sws是第二个出现的,所以没匹配.
    然而,后面一个条件 和其他不包含特殊字符(如括号、引号等,但可以包括英文字符的点(.)),且首字母为小写的单词,那wes不就满足,为啥你的匹配结果没有?
    感觉题目是不是有点问题
    "[A-Z][a-z]*|[a-z][a-z\\.]*\\s"
    不知道对不对.
      

  16.   

    et如果也不需要的话,你就把[xX]改为[xXtT]就可以了还有一个问题,如果只输入一个单词,大写打头的话,也要匹配
    比如输入Cirsium,现在的结果是不匹配的function filterWord(text){
        let isFirst=true;
        let arr=text.split(/\([^()]*\)|\s+/);
        return arr.filter(function(item,index){
            if(isFirst){
                isFirst=false;
                return /^[A-Z][a-z]*$/.test(item);
            }
     if(index===arr.length-1){
                return /^[a-z]+$/.test(item);
            }
            return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
        }).join(' ');
    }
      

  17.   


    function filterWord(text){
        let isFirst=true;
        let arr=text.split(/\([^()]*\)|\s+/);
        return arr.filter(function(item,index){
            if(isFirst){
                isFirst=false;
                return /^[A-Z][a-z]*$/.test(item);
            }
             if(index===arr.length-1){
                return /^(?![eE][xX]$)[a-z]+$/.test(item);
            }
            return /^(?![eE][xX]$)[a-z]+\.?$/.test(item);
        }).join(' ').replace(/(?:\s[a-z]+\.)+$/,'');
    }