Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中拆分问号、感叹号或句点处的字符串并保留这些标记?_Javascript_Regex_Ecmascript 6 - Fatal编程技术网

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

在javascript中拆分问号、感叹号或句点处的字符串并保留这些标记?,javascript,regex,ecmascript-6,Javascript,Regex,Ecmascript 6,我有点惊讶,实际上没有人在javascript中有完全相同的问题 我尝试了几种不同的解决方案,但都没有正确解析内容 我尝试过的最接近的一个:我从PHP解决方案中窃取了它的正则表达式查询 const test = `abc?aaa.abcd?.aabbccc!`; const sentencesList = test.split("/(\?|\.|!)/"); 但结果将是 [abc?aaa.abcd?AAABCC!] 我想要的是 [“abc?”,“aaa.”,“abcd?”,“AAABCC!”]

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

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

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

const test = `abc?aaa.abcd?.aabbccc!`;
const sentencesList = test.split("/(\?|\.|!)/");
但结果将是 [abc?aaa.abcd?AAABCC!]

我想要的是 [“abc?”,“aaa.”,“abcd?”,“AAABCC!”] 我很困惑。。到底出了什么问题?

/[a-z]*[?!]/g会做你想做的事:

常量测试=`abc?aaa.abcd?.aabbccc!`; console.logtest.match/[a-z]*[?!]/g/[a-z]*[?!]/g将执行您想要的操作:

常量测试=`abc?aaa.abcd?.aabbccc!`;
console.logtest.match/[a-z]*[?!]/g为了帮助您,您编写的不是正则表达式。测试。拆分/\?\。!/;只是一个11个字符的字符串。例如,正则表达式应该是test.split/\?\。!/;。这仍然不是你要找的正则表达式

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

接下来,不接受正则表达式作为参数。您需要使用一个接受它们的函数,例如

把这些放在一起,您将希望以如下内容开始您的正则表达式:/.*?/。点表示任何字符匹配,星号表示0或更多,问号表示非贪婪,或尝试匹配尽可能少的字符,同时保持有效匹配

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

const rawText=`abc?aaa.abcd?.aabbccc!`; 常量matchedArray=rawText.match/*?[?!]/g;
console.logmatchedaray 为了帮助你,你写的不是正则表达式。测试。拆分/\?\。!/;只是一个11个字符的字符串。例如,正则表达式应该是test.split/\?\。!/;。这仍然不是你要找的正则表达式

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

接下来,不接受正则表达式作为参数。您需要使用一个接受它们的函数,例如

把这些放在一起,您将希望以如下内容开始您的正则表达式:/.*?/。点表示任何字符匹配,星号表示0或更多,问号表示非贪婪,或尝试匹配尽可能少的字符,同时保持有效匹配

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

const rawText=`abc?aaa.abcd?.aabbccc!`; 常量matchedArray=rawText.match/*?[?!]/g;
console.logmatchedaray;也许/[^?!.]*[?!]/g会稍微稳健一些,但在其他方面回答得很好。@PatrickRoberts lol我只是想把你的答案标记为最佳答案,因为这是一个匹配语句,而不是在拆分中使用,非常感谢你删除了你的答案。。。哈哈,我意识到出于某种原因要正确使用@ic3b3rg answer,我必须在//之前和之后添加。/奇怪。。。你们两个知道为什么分裂需要包括在内吗?@Ezeewei你们想用match来做这个。拆分绝对不是正确的操作。@PatrickRoberts噢,哇!非常非常有趣!我不知道那是在做类似的事情。。。。谢谢你的提示!也许/[^?!.]*[?!]/g会稍微稳健一些,但在其他方面回答得很好。@PatrickRoberts lol我只是想把你的答案标记为最佳答案,因为这是一个匹配语句,而不是在拆分中使用,非常感谢你删除了你的答案。。。哈哈,我意识到出于某种原因要正确使用@ic3b3rg answer,我必须在//之前和之后添加。/奇怪。。。你们两个知道为什么分裂需要包括在内吗?@Ezeewei你们想用match来做这个。拆分绝对不是正确的操作。@PatrickRoberts噢,哇!非常非常有趣!我不知道那是在做类似的事情。。。。谢谢你的提示!你的回答非常详细。我真的很喜欢!谢谢你,你的正则表达式实际上可以用多个单词组成完整的句子,这正是我想要的。非常感谢。你的回答非常详细。我真的很喜欢!谢谢你,你的正则表达式实际上可以用多个单词组成完整的句子,这正是我想要的。非常感谢。相关:用于将文本拆分为sentenc的Javascript RegExp
es并保留分隔符:Related:Javascript RegExp,用于将文本拆分为句子并保留分隔符: