試圖找到正確的正則表達式以獲取除引號之外的數字。對於爲例,在:獲取報價正則表達式之外的數字
444545564 fcf456 f46 ref 464 f64ff4rfrfr'45'4778,458
我想只得到
444545564 456 46 464 64 4 4778 458
我現在用這樣的正則表達式:
[^'a-z\/,\s]\d+[^'a-z\/,\s]
但事實是,它不給我3位數字如46,64或4(這似乎是正常的)。
謝謝你的幫助!
試圖找到正確的正則表達式以獲取除引號之外的數字。對於爲例,在:獲取報價正則表達式之外的數字
444545564 fcf456 f46 ref 464 f64ff4rfrfr'45'4778,458
我想只得到
444545564 456 46 464 64 4 4778 458
我現在用這樣的正則表達式:
[^'a-z\/,\s]\d+[^'a-z\/,\s]
但事實是,它不給我3位數字如46,64或4(這似乎是正常的)。
謝謝你的幫助!
假設單引號是平衡的,沒有轉義序列被認爲是,你可以匹配'...'
子,並匹配和捕捉其他情況下所有數字塊(見更多關於這項技術在The Best Regex Trick Ever (at last!)):
/'[^']*'|(\d+)/g
詳細:
'[^']*'
- '
隨後與012相比其他0+字符然後'
|
- 或(\d+)
- 第1組捕獲一個或多個數字。見JS演示:
var s = "444545564 fcf456 f46 ref 464 f64ff4rfrfr'45'4778,458";
var res = [], m;
var rx = /'[^']*'|(\d+)/g;
while(m=rx.exec(s)) {
if (m[1]) res.push(m[1]);
}
console.log(res);
嗯,正則表達式工作正常,但是當我嘗試在代碼中使用'replace'時,它實現了它應該爲數字做的事情,並且將我所引用的所有東西都改爲'undefined'(這不是很酷) – PaaBliiTo
Meh,剛剛添加了一個條件現在它可以工作。非常感謝您的幫助 ! – PaaBliiTo
@PaaBliiTo:對不起,我出去散步(注意編碼是你爲了生活所做的事情,這非常重要!)。如果你提到你需要*替換*,我會提供它。如果您需要替換*數字*,則需要在'replace'中使用回調。如果你需要*刪除*,你需要捕捉你需要保留的部分,並使用'$ 1'反向引用替換模式中的該組。很高興你知道你自己。 –
您可以使用此一個/[^'](\d+)(?!')/g
和使用1組
const regex = /[^'](\d+)(?!')/g;
const str = `444545564 fcf456 f46 ref 464 f64ff4rfrfr'45'4778,458`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach(function(match, groupIndex) {
if(groupIndex === 1) {
console.log(match);
}
});
}
如果''...'內有非數字字符(例如'aa 2'e45'3'),這將不起作用。另外,'if(m.index === regex.lastIndex){regex。lastIndex的++; }'是多餘的,你不期望在這裏有任何零長度的匹配。 –
你是對的,我的工作原始問題,但你的也處理這種情況。 –
此外,在開始時使用單個否定字符類將會阻止字符串開頭的匹配數字。一個常見的解決方法是在字符串錨的開始處使用交替:'(^ | [^'])' –
字符串是否可以包含轉義序列? '1 \'2 \'33'' - >然後'1'和'2'預計? –
爲什麼不只是'.replace(/'\ d +'/ g,'')'然後將結果字符串與數字匹配? – user7929528
@WiktorStribiżew在你的例子中,'1'是預期的,但不是'2'和'3' – PaaBliiTo