簡體   English   中英

如何使用 JavaScript 正則表達式拆分字符串?

[英]How can I split a string with a JavaScript regex?

我正在嘗試將此字符串拆分為一種結構,

20:33:15     From Deekshitha Oku : Me too

進入

{ time: "20:33:15", name: "Deekshitha Oku", message: "Me too" }

所以為此,我寫了一個正則表達式,

(([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])(.*?)(From)\s(.*?).:\s(.*?).+

但這不是我所期望的,它在這里連接。 我期望的是這樣的,

[
  "20:33:15",
  "Deekshitha Oku",
  "Me too"
]

 const match = "20:33:15 From Deekshitha Oku: Me too".match(/(([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])(.*?)(From)\s(.*?).:\s(.*?).+/); console.log(match);

這個正則表達式有什么問題,我嘗試了很多不同的方法:(

嘗試將您的正則表達式更改為:

^((?:[0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]).*?From\s(.*?).:\s(.*).+$

然后可以生成 object:

 const match = "20:33:15 From Deekshitha Oku: Me too".match(/^((?:[0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]).*?From\s(.*?).:\s(.*).+$/); const object = { time: match[1], name: match[2], message: match[3] }; console.log(object);


編輯:使用命名捕獲組,您可以只使用match.name等,而不必生成新的 object:

 const match = "20:33:15 From Deekshitha Oku: Me too".match(/^(?<time>(?:[0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]).*?From\s(?<name>.*?).:\s(?<message>.*)$/).groups; console.log(match);

注意 match 調用后添加的.groups

不要拆分,將您的捕獲放入命名的捕獲組中:

(?<time>^.{1,8}) *From (?<person>[^:]+?)(?= *:) *: *(?<message>.*$)

https://regex101.com/r/BAMv5K/1

 console.log(/(?<time>^.{1,8}) *From (?<person>[^:]+?)(?= *:) *: *(?<message>.*$)/.exec(`20:33:15 From Deekshitha Oku: Me too`).groups)

我認為你只需要一些小的調整:

/((?:[0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])\s*From\s*([^:]*):\s*(.*)/

首先,當您不想捕獲信息時(就像您在 From 周圍使用的那樣),不要使用括號。 其次,如果您只想將括號用於分組而不是用於捕獲,請使用(?:)而不是() 第三,非貪婪匹配比[^:]*之類的構造更復雜且更容易出錯(在我看來)。 說“匹配所有非冒號”更明確。

請參閱https://regex101.com/r/3dLjbV/1以嘗試解決您的問題。

暫無
暫無

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

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