很抱歉,如果以前曾经问过这个,但我想从这样的字符串中获取一系列单词:
"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(" ");
问题是,它从“不是”这样的词中删除了撇号,把它变成“不是”。
我无法弄清楚如何用这样的词来保留撇号。
非常感谢任何帮助!
var sentence = "Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\".";
console.log(sentence.toLowerCase().replace(/[^\w\s]/gi, "").split(" "));
答案 0 :(得分:3)
解决自己的解决方案会很棘手,但你可以这样考虑撇号:
sentence = `"Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\"."`;
console.log(
sentence.match(/\w+(?:'\w+)*/g)
);

注意:将量词从?
更改为*
,以允许单词中的多个'
。
答案 1 :(得分:1)
@ revo的答案看起来不错,这是另一个应该也适用的选项:
const input = "Exclamation! Question? \"Quotes.\" 'Apostrophe'. Wasn't. 'Couldn't'. \"Didn't\".";
console.log(input.toLowerCase().match(/\b[\w']+\b/g));
说明:
\b
匹配单词的开头/结尾,[\w']+
匹配任何字母,数字,下划线或引号(省略下划线,您可以使用[a-zA-Z0-9']
),/g
告诉正则表达式捕获与该模式匹配的所有匹配项(不仅仅是第一个)。