簡體   English   中英

第一場比賽之前一組

[英]One group before and one group after the first match

我是regex的新手,但感到非常困惑。 我在嘗試弄清楚如何將該字符串分成兩組時遇到麻煩

Lorem ipsum\/|/ | dolor sit654 | amet consectetur

第1組: Lorem ipsum\\/|/

第2組: dolor sit654 | amet consectetur dolor sit654 | amet consectetur

模式是| (“空格” +“豎線” +“空格”)

我想獲得這些字符在組中每個字符的第一次匹配之前和之后的所有內容

我嘗試編寫這樣的正則表達式,但沒有成功:/(. /(.*?)(\\s\\|\\s)(.*)/

這可能嗎?

您的正則表達式可以正常工作:

let str = 'Lorem ipsum\/|/ | dolor sit654 | amet consectetur';
console.log(str.match(/(.*?)(\s\|\s)(.*)/))

輸出:

Array(4) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", " | ", "dolor sit654 | amet consectetur" ]

您可以通過刪除第二個捕獲組來改進它

console.log(str.match(/(.*?)\s\|\s(.*)/))

輸出:

Array(3) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", "dolor sit654 | amet consectetur" ]

或使其不被捕獲:

console.log(str.match(/(.*?)(?:\s\|\s)(.*)/))

輸出:

Array(3) [ "Lorem ipsum/|/ | dolor sit654 | amet consectetur", "Lorem ipsum/|/", "dolor sit654 | amet consectetur" ]

您目前正在捕獲初始| 分組中-但是您希望分組2是第二個子字符串,而不是分隔字符。 要么將這些移出組:

(.*?) \| (.*)
     ^^^^

或改為使用非捕獲組:

(.*?)(?: \| )(.*)
     ^^^^^^^^

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

 console.log( `Lorem ipsum\\/|/ | dolor sit654 | amet consectetur` .match(/(.*?) \\| (.*)/) ); 

您可以將split與正則表達式減去中間捕獲組一起使用。 這種方式使用split會在數組的末端留下多余的空字符串,但是您可以使用以下方法輕松地filter()

 const str = 'Lorem ipsum\\/|/ | dolor sit654 | amet consectetur' let arr = str.split(/(.*?)\\s\\|\\s(.*)/).filter(s => s) console.log(arr) 

暫無
暫無

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

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