JavaScript >> Javascript 文檔 >  >> Tags >> regex

XRegExp 的 Unicode 插件

更新: 下面描述的許多細節現在已經過時了。獲取最新版本的 XRegExp Unicode 插件 .

我發布了一個簡單的 XRegExp 插件(我的 JavaScript 正則表達式庫),它增加了對 Unicode 屬性和 JavaScript 正則表達式塊的支持。它使用最新版本的 Unicode 5.1 字符數據庫。

Unicode 插件在任何 XRegExp 中啟用以下 Unicode 屬性/類別:

  • \p{L} ——信
  • \p{M} — 馬克
  • \p{N} — 號碼
  • \p{P} — 標點符號
  • \p{S} — 符號
  • \p{Z} — 分隔符
  • \p{C} — 其他(控制、格式、私人使用、代理和未分配代碼)

它還啟用了將代碼點 U+0000 到 U+FFFF 劃分為的所有 136 個塊。 Unicode 塊在 Perl 和 Java 之後使用前綴“In”(.NET 使用“Is”)。以下是按字母順序排列的受支持塊:

  • \p{InAlphabeticPresentationForms}
  • \p{InArabic}
  • \p{InArabicPresentationFormsA}
  • \p{InArabicPresentationFormsB}
  • \p{InArabicSupplement}
  • \p{InArmenian}
  • \p{InArrows}
  • \p{InBalinese}
  • \p{InBasicLatin}
  • \p{InBengali}
  • \p{InBlockElements}
  • \p{InBopomofo}
  • \p{InBopomofoExtended}
  • \p{InBoxDrawing}
  • \p{InBraillePatterns}
  • \p{InBuginese}
  • \p{InBuhid}
  • \p{InCham}
  • \p{InCherokee}
  • \p{InCJKCompatibility}
  • \p{InCJKCompatibilityForms}
  • \p{InCJKCompatibilityIdeographs}
  • \p{InCJKRadicalsSupplement}
  • \p{InCJKStrokes}
  • \p{InCJKSymbolsandPunctuation}
  • \p{InCJKUnifiedIdeographs}
  • \p{InCJKUnifiedIdeographsExtensionA}
  • \p{InCombiningDiacriticalMarks}
  • \p{InCombiningDiacriticalMarksforSymbols}
  • \p{InCombiningDiacriticalMarksSupplement}
  • \p{InCombiningHalfMarks}
  • \p{InControlPictures}
  • \p{InCoptic}
  • \p{InCurrencySymbols}
  • \p{InCyrillic}
  • \p{InCyrillicExtendedA}
  • \p{InCyrillicExtendedB}
  • \p{InCyrillicSupplement}
  • \p{InDevanagari}
  • \p{InDingbats}
  • \p{InEnclosedAlphanumerics}
  • \p{InEnclosedCJKLettersandMonths}
  • \p{InEthiopic}
  • \p{InEthiopicExtended}
  • \p{InEthiopicSupplement}
  • \p{InGeneralPunctuation}
  • \p{InGeometricShapes}
  • \p{InGeorgian}
  • \p{InGeorgianSupplement}
  • \p{InGlagolitic}
  • \p{InGreekandCoptic}
  • \p{InGreekExtended}
  • \p{InGujarati}
  • \p{InGurmukhi}
  • \p{InHalfwidthandFullwidthForms}
  • \p{InHangulCompatibilityJamo}
  • \p{InHangulJamo}
  • \p{InHangulSyllables}
  • \p{InHanunoo}
  • \p{InHebrew}
  • \p{InHighPrivateUseSurrogates}
  • \p{InHighSurrogates}
  • \p{InHiragana}
  • \p{InIdeographicDescriptionCharacters}
  • \p{InIPAExtensions}
  • \p{InKanbun}
  • \p{InKangxiRadicals}
  • \p{InKannada}
  • \p{InKatakana}
  • \p{InKatakanaPhoneticExtensions}
  • \p{InKayahLi}
  • \p{InKhmer}
  • \p{InKhmerSymbols}
  • \p{InLao}
  • \p{InLatin1Supplement}
  • \p{InLatinExtendedA}
  • \p{InLatinExtendedAdditional}
  • \p{InLatinExtendedB}
  • \p{InLatinExtendedC}
  • \p{InLatinExtendedD}
  • \p{InLepcha}
  • \p{InLetterlikeSymbols}
  • \p{InLimbu}
  • \p{InLowSurrogates}
  • \p{InMalayalam}
  • \p{InMathematicalOperators}
  • \p{InMiscellaneousMathematicalSymbolsA}
  • \p{InMiscellaneousMathematicalSymbolsB}
  • \p{InMiscellaneousSymbols}
  • \p{InMiscellaneousSymbolsandArrows}
  • \p{InMiscellaneousTechnical}
  • \p{InModifierToneLetters}
  • \p{InMongolian}
  • \p{InMyanmar}
  • \p{InNewTaiLue}
  • \p{InNKo}
  • \p{InNumberForms}
  • \p{InOgham}
  • \p{InOlChiki}
  • \p{InOpticalCharacterRecognition}
  • \p{InOriya}
  • \p{InPhagspa}
  • \p{InPhoneticExtensions}
  • \p{InPhoneticExtensionsSupplement}
  • \p{InPrivateUseArea}
  • \p{InRejang}
  • \p{InRunic}
  • \p{InSaurashtra}
  • \p{InSinhala}
  • \p{InSmallFormVariants}
  • \p{InSpacingModifierLetters}
  • \p{InSpecials}
  • \p{InSundanese}
  • \p{InSuperscriptsandSubscripts}
  • \p{InSupplementalArrowsA}
  • \p{InSupplementalArrowsB}
  • \p{InSupplementalMathematicalOperators}
  • \p{InSupplementalPunctuation}
  • \p{InSylotiNagri}
  • \p{InSyriac}
  • \p{InTagalog}
  • \p{InTagbanwa}
  • \p{InTaiLe}
  • \p{InTamil}
  • \p{InTelugu}
  • \p{InThaana}
  • \p{InThai}
  • \p{InTibetan}
  • \p{InTifinagh}
  • \p{InUnifiedCanadianAboriginalSyllabics}
  • \p{InVai}
  • \p{InVariationSelectors}
  • \p{InVerticalForms}
  • \p{InYijingHexagramSymbols}
  • \p{InYiRadicals}
  • \p{InYiSyllables}

根據 Unicode 標準,在比較塊名稱時會忽略大小寫、空格、連字符和下劃線。因此,\p{InLatinExtendedA} , \p{InLatin Extended-A} , 和 \p{in latin extended a} 都是等價的。

所有屬性和塊都可以通過使用大寫的 p 來反轉。例如,\P{N} 匹配任何不在數字類別中的代碼點。 \P{InArabic} 匹配不在阿拉伯語塊中的代碼點。

重要提示: 當前不支持在字符類中使用 Unicode 屬性或塊。但是,您可以通過交替和/或前瞻來模擬它們的使用,如下所示。

代替: 用途:
[\p{N}] \p{N}
[\p{N}a-z~] (?:\p{N}|[a-z~])
[\p{N}\P{Z}] (?:\p{N}|\P{Z})
[\p{N}\P{Z}a-z~] (?:\p{N}|\P{Z}|[a-z~])
[^\p{N}] \P{N}
[^\p{N}a-z~] (?:(?!\p{N})[^a-z~])
[^\p{N}\P{Z}] (?:(?!\p{N}|\P{Z})[\S\s])
[^\p{N}\P{Z}a-z~] (?:(?!\p{N}|\P{Z})[^a-z~])

此外,Unicode 子類別,如 \p{Nd} 和像 \p{Latin} 這樣的腳本 目前不支持。 (作為比較,ECMAScript 4 正則表達式提案包括 Unicode 屬性/類別,但不包括腳本 塊。在主要的正則表達式中,只有 Perl 和 PCRE 支持 Unicode 腳本。)

考慮到 XRegExp 對其他擴展正則表達式功能的全面支持,我對上述限制不滿意。希望無論如何這對某些人來說會派上用場。如果對此插件感興趣,我可能會在以後的版本中添加缺少的功能。

壓縮(使用 YUI 壓縮器)和 gzip 壓縮後,Unicode 插件只有 5.2 KB。這將被添加到 2.5 KB 的 XRegExp 本身中,從而為您提供更多 JavaScript 正則表達式的優點。

要激活此插件,只需在加載 XRegExp 0.6.1 或更高版本後加載即可。

<script src="xregexp.js"></script>
<script src="xregexp-unicode.js"></script>
<script>
	var unicodeWord = new XRegExp("^\\p{L}+$");
	alert(unicodeWord.test("Русский")); // true
</script>

下載 Unicode 插件 .


Tutorial JavaScript 教程
  1. 如何開發像 Netflix 這樣的應用程序

  2. JavaScript 中的外部源是什麼意思?

  3. 帶有 JS 的加密價格跟踪器

  4. 實現 useState Hook

  5. 使用 Express、React 和 GraphQL 構建簡單的 Web 應用程序

  6. 專業(React)開發團隊如何計劃和評估功能(包括截屏視頻)

  7. express-telescope:Expressjs 應用程序的漂亮錯誤頁面

  1. 隨機...有人對樣式感到困惑嗎?

  2. 使用 renode 創建全棧樣板。

  3. 使用 WebSocket 的聊天應用程序:添加新用戶

  4. Angular 材質模板 - 開源和免費 2022

  5. 創建一個 JavaScript 確認框

  6. 🚀 NextJS 登陸頁面模板免費,帶有 Tailwind CSS 和 TypeScript [開源] ⚡️

  7. 如何使用javascript製作刷新按鈕

  1. React 組件生命週期方法 - 它們是什麼?

  2. 如何注入 JavaScript 代碼來自動操作網站

  3. Vue 3 來了!

  4. 星期一 21 模塊:分割圖像擦除、滾動頂部、拇指網格等