代码之家  ›  专栏  ›  技术社区  ›  MysteryPancake

regex:字符串匹配,包括标点符号

  •  1
  • MysteryPancake  · 技术社区  · 6 年前

    From another question ,我用这个表达式来匹配句子中的单词:

    var sentence = "Exclamation! Question? Full stop. Ellipsis...";
    console.log(sentence.toLowerCase().match(/\w+(?:'\w+)*/g));

    它工作得很好。然而,现在我正在寻找一种方法来分别匹配感叹号、问号和句号。结果应该如下所示:

    [
      "exclamation",
      "!",
      "question",
      "?",
      "full",
      "stop",
      ".",
      "ellipsis",
      "."
    ]
    

    只匹配省略号中的一个点,而不是分别匹配三个点。

    任何帮助都将不胜感激!

    2 回复  |  直到 6 年前
        1
  •  2
  •   mickmackusa    6 年前

    使用单词边界只从省略号返回一个点怎么样?

    var sentence = "Exclamation! Question? Full stop. Ellipsis...";
    console.log(sentence.toLowerCase().match(/[a-z]+(?:'[a-z]+)*|\b[!?.]/g));

    或者消极的展望:

    var sentence = "Exclamation! Question? Full stop. Ellipsis...";
    console.log(sentence.toLowerCase().match(/[a-z]+(?:'[a-z]+)*|[!?.](?![!?.])/g));

    在您的评论场景扩展之后,负面的回顾似乎是有效的。

    var sentence = "You're \"Pregnant\"??? How'd This Happen?! The vasectomy YOUR 1 job. Let's \"talk this out\"...";
    console.log(sentence.toLowerCase().match(/[a-z\d]+(?:'[a-z\d]+)*|(?<![!?.])[!?.]/g));
        2
  •  4
  •   Pawan Singh    6 年前

    尝试下面的代码

    var sentence = "Exclamation! Question? Full stop. Ellipsis...";
    console.log(sentence.toLowerCase().match(/[?!.]|\w+/g));

    如果你只想要一个点,你可以用---

    var sentence = "Exclamation!!! Question??? Full stop. Ellipsis...";
    
    var arr = sentence.toLowerCase().match(/[?]+|[!]+|[.]+|\w+/g);
    arr = arr.map(function(item){
    	return item.replace(/(.)\1+/g, "$1");
    })
    
    console.log(arr);