![](/img/trans.png)
[英]Using javascript how can I loop through regex matches and split string into array of pieces divided by hyperlinks?
[英]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.