Javascript - 正则表达式 - 字边界 (\b) 问题

标签 javascript regex word-boundary

我在正则表达式中使用 \b 和希腊字符有困难。

this example [a-zA-ZΆΈ-ώἀ-ῼ]* 成功标记了我想要的所有单词(希腊语和英语)。现在考虑我要查找包含 2 个字母的单词。对于英语,我使用类似 this: 的东西 \b[a-zA-Z]{2}\b。你能帮我写一个正则表达式,成功地用 2 个字母标记希腊语单词吗? (为什么?我的最终目标是删除它们)。

使用的文本:

Greek MONOTONIC: Το γάρ ούν και παρ' υμίν λεγόμενον, ώς ποτε Φαέθων Ηλίου παίς το του πατρός άρμα ζεύξας δια το μή δυνατός είναι κατά την του πατρός οδόν ελαύνειν τα τ' επί της γής ξυνέκαυσε και αυτός κεραυνωθείς διεφθάρη, τούτο μύθου μέν σχήμα έχον λέγεται, το δέ αληθές εστι των περί γήν και κατ' ουρανόν ιόντων παράλλαξις και διά μακρόν χρόνον γιγνομένη των επί γής πυρί πολλώ φθορά.

Greek POLYTONIC: Τὸ γὰρ οὖν καὶ παρ' ὑμῖν λεγόμενον, ὥς ποτε Φαέθων Ἡλίου παῖς τὸ τοῦ πατρὸς ἅρμα ζεύξας διὰ τὸ μὴ δυνατὸς εἶναι κατὰ τὴν τοῦ πατρὸς ὁδὸν ἐλαύνειν τὰ τ' ἐπὶ τῆς γῆς ξυνέκαυσε καὶ αὐτὸς κεραυνωθεὶς διεφθάρη, τοῦτο μύθου μὲν σχῆμα ἔχον λέγεται, τὸ δὲ ἀληθές ἐστι τῶν περὶ γῆν καὶ κατ' οὐρανὸν ἰόντων παράλλαξις καὶ διὰ μακρὸν χρόνον γιγνομένη τῶν ἐπὶ τῆς γῆς πυρὶ πολλῷ φθορά.

ENGLISH: For in truth the story that is told in your country as well as ours, how once upon a time Phaethon, son of Helios, yoked his father's chariot, and, because he was unable to drive it along the course taken by his father, burnt up all that was upon the earth and himself perished by a thunderbolt,—that story, as it is told, has the fashion of a legend, but the truth of it lies in the occurrence of a shifting of the bodies in the heavens which move round the earth, and a destruction of the things on the earth by fierce fire, which recurs at long intervals.

到目前为止我尝试了什么:

// 1
txt = txt.replace(/\b[a-zA-ZΆΈ-ώἀ-ῼ]{2}\b/g, '');

// 2
tokens = txt.split(/\s+/);
txt = tokens.filter(function(token){ return token.length > 2}).join(' ');

// 3
tokens = txt.split(' ');
txt = tokens.filter(function(token){ return token.length != 3}).join(' ') );

2 和 3 在这里针对我的问题提出了建议:Javascript - regex - how to remove words with specified length

编辑

另请阅读:

最佳答案

由于 Javascript 没有 lookbehind 功能,而且单词边界只适用于 \w 字符类的成员,唯一的方法是使用组(如果你想替换):

(?m)(^|[^a-zA-ZΆΈ-ώἀ-ῼ\n])([a-zA-ZΆΈ-ώἀ-ῼ]{2})(?![a-zA-ZΆΈ-ώἀ-ῼ])

删除 2 个字母单词的示例:

txt = txt.replace(/(^|[^a-zA-ZΆΈ-ώἀ-ῼ\n])([a-zA-ZΆΈ-ώἀ-ῼ]{2})(?![a-zA-ZΆΈ-ώἀ-ῼ])/gm, '\1');

关于Javascript - 正则表达式 - 字边界 (\b) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458872/

相关文章:

javascript - 如何使用 $(element).css(styles) 将多种样式应用于 div?

c - 使用 sscanf 从格式化字符串中读取多个值

java - 在 Java 中使用 HSQLDB 进行正则表达式查询

javascript - 过滤字符串 只过滤不带空格的字符串

javascript - Vue 与所有(或大多数)组件共享外部库

regex - 制作一个包含我的列表项的文本文件并对其应用正则表达式

php - 正则表达式字边界替代

javascript - 正则表达式中的美元符号 "\$",字边界为 "\b"(PHP/JavaScript)

正则表达式允许带前瞻和 "."的字边界

javascript - AngularJS +sails.js