簡體   English   中英

從 Java map 中刪除值並使用正則表達式替換為逗號

[英]Remove values from Java map and replace with comma using Regex

我有一個正則表達式,它將針對 map 中“:”右側和“,”左側的所有內容

我正在使用這個正則表達式:

:(.*?)(,|})

像這樣:

$PROP_TYPES.replaceAll(":(.*?)(,|})", ",").concat("}")

這在大多數情況下都很有效,除非表達式遇到“:”右側的對象

例如,在 TypeScript 中的道具類型定義列表中:

  "open": "boolean",
  "onDidDismiss": "() => void",
  "message": "string",
  "showAddReceiptModal": "boolean",
  "showModal": "(value: (((prevState: boolean) => boolean) | boolean)) => void",
  "vehicleTabRef": "React.MutableRefObject<null>",
  "onReceiptSubmit": "(data) => void",
  "vehicle": "any",
  "showModal1": "boolean",
  "showModal2": "(value: (((prevState: boolean) => boolean) | boolean)) => void",
  "selectedReceipt": "{ __typename: "Receipt" | undefined; id: string | undefined; purchaseDate: string | undefined; sellerName: string | undefined; sellerAddress: string | undefined; sellerCity: string | undefined; sellerState: string | undefined; sellerZipCode: string | undefined; totalAmount: number | undefined; gallonsPurchased: number | undefined; image?: string | null | undefined | undefined; userID?: string | null | undefined | undefined; vehicleID: string | undefined; vehicle?: Vehicle | null | undefined | undefined; taxRefund?: number | null | undefined | undefined; createdAt: string | undefined; updatedAt: string | undefined }",
  "onClick": "() => void",
  "onClick1": "() => void",
  "dataEditing": "boolean",
  "toastMessage": "(val) => void",
  "editing": "(bool) => void",
  "showToast": "(bool) => void",
  "showModal3": "boolean",
  "showModal4": "(bool) => void",
  "dateFilter": "{ startDate: string; endDate: string }",

當我用這個正則表達式運行 replaceAll 時,替換是一個逗號,我留下了這個:

  open,
  onDidDismiss,
  message,
  showAddReceiptModal,
  showModal,
  vehicleTabRef,
  onReceiptSubmit,
  vehicle,
  showModal1,
  showModal2,
  selectedReceipt,                                                 
  , 
  onClick, 
  onClick1, 
  dataEditing,
  toastMessage, 
  editing, 
  showToast, 
  showModal3, 
  showModal4, 
  dateFilter, 
  , 

注意空逗號,這些不應該在這里。 此表達式應針對“:”右側的所有內容並將其全部替換為逗號。

此代碼使用 VTL 編寫,可與 Webstorm IDE 一起使用,以創建快速 typescript 模板。 但是 Java 字符串操作也可以

我可以使用什么正則表達式來僅刪除:右側的所有內容到結尾的逗號,然后留下那個逗號?

您可能會使用:

^\s*\"([^\"]+)\":.*(?=,)

解釋

  • ^字符串開頭
  • \s*匹配可選的空白字符(或在 Java 中使用\h*以不匹配換行符)
  • \"([^\"]+)\"在第 1 組中捕獲全部在雙引號之間
  • :.*匹配:然后是 rest 行
  • (?=,)正向前瞻,右置逗號

正則表達式演示

在替換使用捕獲組 1。

替換后的結果:

open,
onDidDismiss,
message,
showAddReceiptModal,
showModal,
vehicleTabRef,
onReceiptSubmit,
vehicle,
showModal1,
showModal2,
selectedReceipt,
onClick,
onClick1,
dataEditing,
toastMessage,
editing,
showToast,
showModal3,
showModal4,
dateFilter,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM