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

JavaScript、正則表達式和 Unicode

並非所有速記字符類和其他 JavaScript 正則表達式語法都支持 Unicode。在某些情況下,準確了解某些令牌匹配的內容可能很重要,這就是本文將要探討的內容。

根據 ECMA-262 第 3 版,\s , \S , . , ^ , 和 $ 使用基於 Unicode 的 空格 解釋 和 換行 , 而 \d , \D , \w , \W , \b , 和 \B 使用 digit 的純 ASCII 解釋 , 單詞字符 , 和 單詞邊界 (例如 /a\b/.test("naïve") 返回 true )。實際的瀏覽器實現通常在這些方面有所不同。例如,Firefox 2 考慮 \d\D 是 Unicode 感知的,而 Firefox 3 修復了這個錯誤 - 使 \d 相當於 [0-9] 與大多數其他瀏覽器一樣。

以下是受影響的令牌及其定義:

  • \d — 數字。
  • \s — 空白。
  • \w — 單詞字符。
  • \D — 數字除外。
  • \S — 除空白之外的所有內容。
  • \W — 除單詞字符外的所有字符。
  • . — 除換行符之外的所有內容。
  • ^ (使用 /m ) — 字符串開頭和換行符之後的位置。
  • $ (使用 /m ) — 字符串末尾和換行符之前的位置。
  • \b — 單詞邊界位置。
  • \B — 不是單詞邊界位置。

以上所有內容都是 Perl 衍生正則表達式風格的標準。然而,術語digit的含義 , 空格 , 單詞字符 , 詞界 , 和 換行 取決於你使用的正則表達式風格、字符集和平台,所以這裡是官方的 JavaScript 含義,因為它們適用於正則表達式:

  • 數字 — 僅限字符 0-9。
  • 空格 — 製表符、換行符、垂直製表符、換頁符、回車符、空格、不間斷空格、行分隔符、段落分隔符和“任何其他 Unicode '空格分隔符'”。
  • 單詞字符 — 僅限字符 A-Z、a-z、0-9 和 _。
  • 字邊界單詞字符之間的位置 和非單詞字符 .
  • 換行 — 換行符、回車符、行分隔符和段落分隔符。

這裡又是換行符及其字符代碼:

  • \u000a — 換行 — \n
  • \u000d — 回車 — \r
  • \u2028 — 行分隔符
  • \u2029 — 段落分隔符

請注意,ECMAScript 4 提案表明 C1/Unicode NEL“下一行”控製字符(\u0085 ) 將被識別為該標準中的附加換行符。另請注意,儘管 CRLF(回車後跟換行符)在大多數情況下被視為單個換行符序列,但 /\r^$\n/m.test("\r\n") 返回 true .

至於空格,ECMA-262 第 3 版使用基於 Unicode 的基本多語言平面的解釋,來自 Unicode 標準的 2.1 版或更高版本。以下是 \s 應該匹配的字符 根據 ECMA-262 第 3 版和 Unicode 5.1:

  • \u0009 — 選項卡 — \t
  • \u000a — 換行 — \n —(換行符)
  • \u000b — 垂直製表符 — \v
  • \u000c — 換頁 — \f
  • \u000d — 回車 — \r —(換行符)
  • \u0020 — 空間
  • \u00a0 — 無間斷空間
  • \u1680 — Ogham 空格標記
  • \u180e — 蒙古語元音分隔符
  • \u2000 — 四邊形
  • \u2001 — Em 四邊形
  • \u2002 — 空間
  • \u2003 — Em 空間
  • \u2004 — 每人三個空間
  • \u2005 — 每人四個空間
  • \u2006 — 每人六個空間
  • \u2007 — 圖空間
  • \u2008 — 標點空格
  • \u2009 — 狹小的空間
  • \u200a — 頭髮空間
  • \u2028 — 行分隔符 —(換行符)
  • \u2029 — 段落分隔符 —(換行符)
  • \u202f — 狹窄的不間斷空間
  • \u205f — 中等數學空間
  • \u3000 — 表意空間

要測試瀏覽器中此處提到的所有標記匹配哪些字符或位置,請參閱 JavaScript 正則表達式和 Unicode 測試 .請注意,Firefox 2.0.0.11、IE 7 和 Safari 3.0.3 beta 的某些測試都出錯了。

更新: 我的新 Unicode 插件 對於 XRegExp 允許您輕鬆匹配 JavaScript 正則表達式中的 Unicode 類別、腳本和塊。


Tutorial JavaScript 教程
  1. 我的 Vanilla JavaScript 內置 Web 元素集合

  2. React Hook:檢測組件外部的點擊

  3. 如何使用 Bootstrap 和對比度創建漂亮的導航欄

  4. Express 中的參數

  5. LinearSearch-VS-BinarySearch

  6. 反應 tldr;樣式化組件 v5

  7. 處理遞歸的三種方法

  1. 從 JavaScript 到 Ruby

  2. 動畫導航(HTML5、CSS3 和 JS)

  3. 使用 Bootstrap 和 React 門戶的可訪問模式

  4. TypeScript 備忘單📄(32 個代碼示例 + PDF 和海報)

  5. React 中的測試驅動開發:你會這樣做嗎?

  6. 使用 Clerk 和 Firebase 構建高級食譜應用程序🔥

  7. JavaScript 揭秘:短路、無效合併和可選鏈接

  1. NextJS 在 2021 年的優缺點

  2. JavaScript 時間格式 |簡短的例子

  3. 我們如何將智能合約連接到 UI

  4. JavaScript 中 SLICE 和 SPLICE 的區別