Javascript:删除字符串标点并拆分为单词?

Javascript:删除字符串标点并拆分为单词?,javascript,regex,string,Javascript,Regex,String,很抱歉,如果以前有人问过这个问题,我会尝试从如下字符串中获取一个单词数组: "Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\"." [ "exclamation", "question", "quotes", "apostrophe", "wasn't" "couldn't", "didn't" ] 该数组应如下所示: "Exclamation! Ques

很抱歉,如果以前有人问过这个问题,我会尝试从如下字符串中获取一个单词数组:

"Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\"."
[
  "exclamation",
  "question",
  "quotes",
  "apostrophe",
  "wasn't"
  "couldn't",
  "didn't"
]
该数组应如下所示:

"Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\"."
[
  "exclamation",
  "question",
  "quotes",
  "apostrophe",
  "wasn't"
  "couldn't",
  "didn't"
]
目前我正在使用以下表达式:

sentence.toLowerCase().replace(/[^\w\s]/gi, "").split(" ");
问题是,它删除了像was not这样的单词中的撇号,把它变成了wasnt

我不知道怎样在这样的词中保留撇号

任何帮助都将不胜感激

var句子=感叹号!问题\引号。\'撇号'。不是不能\没有。;
console.log句子.toLowerCase.replace/[^\w\s]/gi、.split<在你自己的解决方案中工作是很棘手的,但是你可以用这样的方式考虑撇号:

句子=`感叹号!问题\引号。\'撇号'。不是不能\没有; console.log 句子.match/\w+?:'\w+*/g
; @revo的答案看起来不错,这里还有一个选项也应该有效:

常量输入=感叹号!问题\引号。\'撇号'。不是不能\没有。;
console.loginput.toLowerCase.match/\b[\w']+\b/g;“不能做”或“不能做”会发生什么情况?请尝试拆分空白,然后删除每个单词开头和结尾的标点。@Bergi我试图只获取单词,因此在这两种情况下都是“不能”和“不能”do@DarrenSweeney我不是用空格来代替空格,只是我不想要的字符。当前表达式有效,它只是删除了撇号。你不必使用我可怕的解决方案。这句话是从另一个帖子里偷来的。让你更容易的事。非常感谢这段代码!我想说你的解决方案可以改进,但我没有同意,因为这不是一个好的解决方案。非常感谢,这是一个非常好的答案,但我觉得我必须接受Jeto的,因为它允许多个撇号。我想允许这样做以防万一。此外,我用\转义了所有引号,因此您可能不需要在字符串周围添加反勾号。@MysteryPancake请参阅更新。你只需要换衣服?至*。此外,通过这种方式,您可以确保像Ive这样具有无效撇号序列的子字符串不匹配。非常感谢!对不起,我在regex很糟糕,你能解释一下你和他的区别吗?我不知道该选哪一个use@MysteryPancake当然,我将首先添加一些注释来解释这个选项的工作原理。@MysteryPancake revo的正则表达式匹配cann或quotes之类的单词,后跟一个可选的“和另一个类似“t”的单词。Jeto的正则表达式匹配任何单词字符,例如两个单词边界之间的字母和撇号,即从单词开始到结束的字母和撇号的任意组合。这也将允许couldnt,revo的解决方案不会。