我正在嘗試創建一個正則運算式,它將選擇后面沒有括號的數字/數字(如果更容易,可以稍后修剪逗號),也不應該選擇括號內的數字。
與 JavaScript 的 String.match 方法一起使用
示例字串
9(296,178),5,3(123),10
10,9(296,178),2,5,3(123),3(124,125)
10,7,5(296,293,444,1255),3(218),2,4
到目前為止我所擁有的:
/((^\d [^\(])|(,\d ,)|(,*\d $))/gm
我在 regex101 中嘗試了這個,并在我想匹配的數字和不應該匹配的數字上加了下劃線。

uj5u.com熱心網友回復:
您可以從替換開始以洗掉所有不需要的部分:
/\d*\(.*?\),?//gm
演示
這給你留下了
5,10
10,2,5,
10,7,2,4
這使得匹配非常簡單:
/(\d )/gm
如果您希望它作為單個匹配運算式,您可以使用否定的lookbehind:
/(?<!\([\d,]*)(\d )(?:,|$)/gm
演示- 這是與可運行 javascript 相同的匹配運算式(從Wiktor 的答案中借用的骨架代碼):
const text = `9(296,178),5,3(123),10
10,9(296,178),2,5,3(123),3(124,125)
10,7,5(296,293,444,1255),3(218),2,4`;
const matches = Array.from(text.matchAll(/(?<!\([\d,]*)(\d )(?:,|$)/gm), x=>x[1])
console.log(matches);
uj5u.com熱心網友回復:
在這里,我推薦所謂的“有史以來最好的正則運算式技巧”:只需匹配您不需要的內容(負面背景關系),然后匹配并捕獲您需要的內容,并僅獲取捕獲的專案。
如果要匹配與\d \([^()]*\)模式不匹配的整數(數字后跟括號子字串),您可以匹配此模式或匹配并捕獲,\d 一個或多個數字匹配模式,然后簡單地從匹配項中獲取組 1 值:
const text = `9(296,178),5,3(123),10
10,9(296,178),2,5,3(123),3(124,125)
10,7,5(296,293,444,1255),3(218),2,4`;
const matches = Array.from(text.matchAll(/\d \([^()]*\)|(\d )/g), x=> x[1] ?? "").filter(Boolean)
console.log(matches);
詳情:
text.matchAll(/\d \([^()]*\)|(\d )/g)- 匹配一個或多個數字 (\d)((with ) 除and (with ) (see ) 以外的\(任何零個或多個字符,或 ( ) 捕獲到組 1 中的一個或多個數字 ( )()[^()]*\)\)|(\d )Array.from(..., x=> x[1] ?? "")- 獲取第 1 組值,或者,如果未分配,則僅添加一個空字串.filter(Boolean)- 洗掉空字串。
uj5u.com熱心網友回復:
使用幾個替換正則運算式
var textA = `9(296,178),5,3(123),10
10,9(296,178),2,5,3(123),3(124,125)
10,7,5(296,293,444,1255),3(218),2,4
`
console.log('A', textA)
var textB = textA.replace(/\(.*?\),?/g, ';')
console.log('B', textB)
var textC = textB.replace(/^\d |\d $|\d*;\d*/gm, '')
console.log('C', textC)
var textD = textC.replace(/, /g, ' ').trim(',')
console.log('D', textD)
有一個回圈
這是一個解決方案,它用逗號分隔行并在各個部分上回圈:
var inside = false;
var result = [];
`9(296,178),5,3(123),10
10,9(296,178),2,5,3(123),3(124,125)
10,7,5(296,293,444,1255),3(218),2,4
`.split("\n").map(line => {
let pieceArray = line.split(",")
pieceArray.forEach((piece, k) => {
if (piece.includes('(')) {
inside = true
} else if (piece.includes(')')) {
inside = false
} else if (!inside && k > 0 && k < pieceArray.length-1 && !pieceArray[k-1].includes(')')) {
result.push(piece)
}
})
})
console.log(result)
它確實列印了預期的結果:["5", "7"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520766.html
下一篇:在PHP中用單個逗號洗掉多個逗號
