Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Parsing - Fatal编程技术网

Javascript 将字符串解析为没有英文字符和发音的单词

Javascript 将字符串解析为没有英文字符和发音的单词,javascript,string,parsing,Javascript,String,Parsing,我试图在Javascript中将字符串拆分为单个单词的数组。第一步很简单: words = text.split(/\b\s+(?!$)/); 除了不使用标点符号作为分隔符外,此解决方案工作正常。例如写“你好!你好吗?”,在单词数组中,我发现“你好!”、“你好”、“你好”、“你呢?” 我用一个不太优雅的解决方案解决了这个问题(但它是有效的!) 但仍然存在一个大问题。如果str包含任何非英语字符(例如意大利语字符ò、á、ù、ù),则方法split不会分割单词 例如,如果文本是“Perchései

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

words = text.split(/\b\s+(?!$)/);
除了不使用标点符号作为分隔符外,此解决方案工作正常。例如写“你好!你好吗?”,在单词数组中,我发现“你好!”、“你好”、“你好”、“你呢?”

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

但仍然存在一个大问题。如果str包含任何非英语字符(例如意大利语字符ò、á、ù、ù),则方法split不会分割单词

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


有解决办法吗?非常感谢你的帮助

有关删除标点符号的更优雅的解决方案,请参见此处:

为解决您的重音字符问题,请考虑使用以下正则表达式:

(?=\w|\W)\s+
不过,这一个选择了空换行符,但如果您使用我链接的问题中的顶级解决方案,这应该足以解决您的问题:

(?=\w|\W)\s

有关删除标点符号的更优雅的解决方案,请参见此处:

为解决您的重音字符问题,请考虑使用以下正则表达式:

(?=\w|\W)\s+
不过,这一个选择了空换行符,但如果您使用我链接的问题中的顶级解决方案,这应该足以解决您的问题:

(?=\w|\W)\s
通过使用,可以创建数组。但是,您可以使用
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¡']
如果需要排除非英语标点符号,可以向正则表达式中添加任何要排除的标点符号。如果你想排除所有可能的非英语字符和英语字符,你会得到一个相当大的正则表达式,所以你可能只想考虑排除最常见的正则表达式,而把其他词作为“足够好”。不要试图排除
˥
符号,因为它不太可能用于普通句子中。

通过使用,您可以创建数组。但是,您可以使用
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¡']

如果需要排除非英语标点符号,可以向正则表达式中添加任何要排除的标点符号。如果你想排除所有可能的非英语字符和英语字符,你会得到一个相当大的正则表达式,所以你可能只想考虑排除最常见的正则表达式,而把其他词作为“足够好”。不尝试排除
˥
符号,因为它不太可能在普通句子中使用。

使用
字符串的另一种解决方案。match
函数:

var str = "Perché sei partito?",
    words = str.match(/[a-zA-Z\u00C0-\u1FFF\u2C00-\uD7FF]+\b/g);

console.log(words);   // ["Perch", "sei", "partito"]

使用
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"]

那么您在ASCII字符之间进行了检查了吗?正则表达式将获取所有不在NULL到DEL(0-127)范围内的unicode字符。由于该范围还包括所有英文字符,我们需要使用
\w
将它们添加回。这太神奇了,我从来都不知道。所以您在ASCII字符之间进行了检查?正则表达式将获取所有不在NULL到DEL(0-127)范围内的unicode字符。由于该范围还包括所有英文字符,我们需要使用
\w
将它们添加回。这太神奇了,我从来不知道。