Javascript - 正则表达式 - 单词边界(\b)问题 [英] Javascript - regex - word boundary (\b) issue

查看:166
本文介绍了Javascript - 正则表达式 - 单词边界(\b)问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a difficulty using \b and greek characters in a regex.

此示例 [a-zA-ZΆΈ-ἀἀ-ῼ] * 成功标记我想要的所有单词(希腊语和英语单词)。现在考虑我想找到2个字母的单词。对于英语,我使用这个:
\b [A-ZA-Z] {2} \b 。你能帮我写一个正则表达式,成功用2个字母标记希腊语单词吗? (为什么?我的最终目标是删除它们。)

At this example [a-zA-ZΆΈ-ώἀ-ῼ]* succeeds to mark all the words I want (both greek and english). Now consider that I want to find words with 2 letters. For the English language I use something like this: \b[a-zA-Z]{2}\b. Can you help me write a regex that succeeds to mark words in Greek with 2 letters? (Why? My final goal is to remove them).

使用的文字:

希腊语单调:
τογάρούνκαιπαρ 'υμίνλεγόμενον,ώςποτεΦαέθωνΗλίουπαίςτοτουπατρόςάρμαζεύξαςδιατομήδυνατόςείναικατάτηντουπατρόςοδόνελαύνειντατ' επί τηςγήςξυνέκαυσεκαιαυτόςκεραυνωθείςδιεφθάρη,τούτομύθουμένσχήμαέχονλέγεται,τοδέαληθέςεστιτωνπερίγήνκαικατουρανόνιόντωνπαράλλαξιςκαιδιάμακρόνχρόνονγιγνομένητωνεπίγήςπυρίπολλώφθορά。

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

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

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

ENGLISH:
事实上,你们国家和我们所讲的故事一如既往有一段时间赫利俄斯的儿子希颂y his y y y y y and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and它被告知,有时尚一个传说的真相,但它的真相在于天空中的身体在地球上移动的发生,以及在激烈的火焰中对地球上的东西的破坏,这种火焰会在很长的时间间隔内复发。

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 - 正则表达式 - 如何删除指定长度的字词

2 & 3 were suggested to my question here: Javascript - regex - how to remove words with specified length

编辑

另请阅读:

  • Why can't I use accented characters next to a word boundary?
  • Javascript + Unicode regexes

推荐答案

由于Javascript没有lookbehind功能,因为单词边界仅适用于 \w 字符的成员class,唯一的方法是使用组(如果你想要替换,则捕获组):

Since Javascript doesn't have the lookbehind feature and since word boundaries work only with members of the \w character class, the only way is to use groups (and capturing groups if you want to make a replacement):

(?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)问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆