gpt4 book ai didi

javascript - 将字符串解析为不含英语字符和标点符号的单词

转载 作者:行者123 更新时间:2023-12-02 14:39:06 25 4
gpt4 key购买 nike

我正在尝试将一个字符串拆分为 Javascript 中的单个单词数组。第一步非常简单:

words = text.split(/\b\s+(?!$)/);

此解决方案工作正常,但它不使用标点符号作为分隔符。例如,写“Hello!How are you?”,在单词数组中我找到“Hello!”、“How”、“are”、“you?”。

我用一个不太优雅的解决方案解决了这个问题(但它有效!):

str= str.replace(",","");
str= str.replace(".","");
str= str.replace("!","");
str= str.replace("?","");

但是还有一个大问题。如果 str 包含任何非英文字符(例如意大利语字符 ò,à,è,ù),方法 split 不会拆分单词。

例如,如果文本是“Perché seipartito?”,“Perché sei”将被拆分为数组单词的单个元素(就好像它是单个单词一样)。

有什么解决办法吗?非常感谢您的帮助!

最佳答案

通过使用 regular expression that matches all non-english and english unicode characters ,您可以创建您的数组。但是,您可以只使用 match 返回单词数组,而不是使用 split(它会尝试按匹配项拆分字符串)。

var wordsRegex = /([^\x00-\x7F]|\w)+/g;
var sentence = 'Hello! How are you?';
console.log(sentence.match(wordsRegex)); //=> ['Hello', 'How', 'are', 'you']

sentence = 'Perché sei partito?';
console.log(sentence.match(wordsRegex)); //=> ['Perché', 'sei', 'partito']

您需要注意的一件事是,正则表达式仅考虑英语标点符号,因此,如果您的字符串包含拉丁标点符号(例如 ¡),您将得到这些结果。

sentence = 'Perché sei partito¡';
console.log(sentence.match(wordsRegex)); //=> ['Perché', 'sei', 'partito¡']

如果您需要排除非英语标点符号,您可以将任何 unicode characters 添加到正则表达式中你想排除。公平警告,如果您尝试排除所有可能的非英语和英语字符,您最终会得到一个相当大的正则表达式,因此您可能只想考虑排除最常见的字符并将其他字符保留为“足够好”。例如,不要尝试排除 ˥ 符号,因为它不太可能在常见句子中使用。

关于javascript - 将字符串解析为不含英语字符和标点符号的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37179248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com