[英]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.