代码之家  ›  专栏  ›  技术社区  ›  ey dee ey em

在javascript中拆分问号、感叹号或句点处的字符串并保留这些标记?

  •  1
  • ey dee ey em  · 技术社区  · 7 年前

    我有点惊讶,实际上没有人在javascript中有完全相同的问题。。。

    我尝试了几种不同的解决方案,但都没有正确解析内容。

    我试过的最接近的一个:(我从一个PHP解决方案中偷了它的正则表达式查询)

    const test = `abc?aaa.abcd?.aabbccc!`;
    const sentencesList = test.split("/(\?|\.|!)/");
    

    但结果将是 ["abc?aaa.abcd?.aabbccc!"]

    我想要的是 ['abc?', 'aaa.', 'abcd?','.', 'aabbccc!'] 我很困惑。。到底怎么了?

    2 回复  |  直到 7 年前
        1
  •  7
  •   ic3b3rg    7 年前

    /[a-z]*[?!.]/g) 将执行您想要的操作:

    const test = `abc?aaa.abcd?.aabbccc!`;
    console.log(test.match(/[a-z]*[?!.]/g))
        2
  •  2
  •   Bronzdragon David    7 年前

    为了帮助你,你写的不是正则表达式。 test.split("/(\?|\.|!)/"); 只是一个11个字符的字符串。例如,正则表达式是, test.split(/(\?|\.|!)/); . 这仍然不是你要找的正则表达式。

    这个正则表达式的问题是它正在寻找一个 ? . ! 性格 只有 ,捕捉那个孤独的角色。您要做的是查找任意数量的字符,后跟这三个字符中的一个。

    String.split 不接受正则表达式作为参数。您需要使用一个接受它们的函数(例如 String.match ).

    综上所述,您需要从以下内容开始您的正则表达式: /.*?/ . 点表示任何字符匹配,星号表示0或更多,问号表示“非贪婪”,或者在保持有效匹配的同时,尝试匹配尽可能少的字符。

    要搜索你的三个角色,你可以使用 /[?!.]/ 表示您想要这三个字符中的一个(到目前为止,我们已经 /.*?[?!.]/ )。最后,您希望添加g标志,以便它搜索每个实例,而不是只搜索第一个实例。 /.*?[?!.]/g . 现在我们可以把它用在 match :

    const rawText = `abc?aaa.abcd?.aabbccc!`;
    const matchedArray = rawText.match(/.*?[?!.]/g);
    console.log(matchedArray);
        3
  •  0
  •   Gayathri    4 年前

    final String S = "An sentence may end with period. Does it end any other way? Ofcourse!";
    final String[] simpleSentences = S.split("[?!.]");
    //now simpleSentences array has three elements in it.