我有点惊讶,实际上没有人在javascript中遇到过完全相同的问题...
我尝试了几种不同的解决方案,但都无法正确解析内容。
我尝试过的最接近的方法:(我从PHP解决方案中窃取了它的regex查询)
const test = `abc?aaa.abcd?.aabbccc!`;
const sentencesList = test.split("/(\?|\.|!)/");
但是结果只会是
["abc?aaa.abcd?.aabbccc!"]
我想得到的是
['abc?', 'aaa.', 'abcd?','.', 'aabbccc!']
我很困惑..到底是什么问题?
答案 0 :(得分:7)
/[a-z]*[?!.]/g)
将做您想要的事情:
const test = `abc?aaa.abcd?.aabbccc!`;
console.log(test.match(/[a-z]*[?!.]/g))
答案 1 :(得分:2)
为了帮助您,您编写的不是正则表达式。 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);
答案 2 :(得分:0)
以下代码有效,我认为我们不需要模式匹配。我收回,我一直在用 Java 回答。
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.