我正在尝试将字符串拆分为Javascript中的单个单词数组。第一步很简单:
words = text.split(/\b\s+(?!$)/);
此解决方案正常,但不使用标点符号作为分隔符。例如写下“你好!你好吗?”,在一系列单词中我找到“你好!”,“如何”,“是”,“你呢?”。
我用一个不太优雅的解决方案解决了这个问题(但它确实有效!):
str= str.replace(",","");
str= str.replace(".","");
str= str.replace("!","");
str= str.replace("?","");
但仍有一个大问题。如果str包含任何非英文字符(例如意大利字符ò,à,è,ù),则方法拆分不会拆分单词。
例如,如果文本是“Perchéseipartito?”,则“Perchései”会被拆分为数组单词的单个元素(就像它是单个单词一样)。
任何解决方案?非常感谢您的帮助!
答案 0 :(得分:2)
使用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。公平的警告,如果你试图排除所有可能的非英语和英语字符,你最终会得到一个相当大的正则表达式,所以你可能只想考虑排除最常见的那些并留下其他人作为"够好了。"例如,不要试图排除˥
符号,因为它不太可能在常用句子中使用。
答案 1 :(得分:0)
有关删除标点符号的更优雅解决方案,请参阅此处: How can I strip all punctuation from a string in JavaScript using regex?
要解决重音字符问题,请考虑使用以下正则表达式:
(?=\w|\W)\s+
虽然这个空白换行了,但是如果你在我链接的问题中使用顶级解决方案,这应该足以解决你的问题了:
(?=\w|\W)\s
答案 2 :(得分:0)
使用String.match
函数的另一种解决方案:
var str = "Perché sei partito?",
words = str.match(/[a-zA-Z\u00C0-\u1FFF\u2C00-\uD7FF]+\b/g);
console.log(words); // ["Perch", "sei", "partito"]