目標字串看起來像一個數字,后跟一個空格,然后是一個或多個字母,例如1 Fooor 2 Foo bar。
我可以使用[^\d\s]. ,但它不適用于單個字母,例如3 A.
在這里可以做什么?
https://regexr.com/6io06
我目前使用的解決方法是使用替換而不是匹配。
from \d\s(. )
to $1
但作為一個純粹主義者,我更喜歡使用替換當且僅當我們的意思不是“什么都沒有替換”。當我們需要用空替換某些東西時,我更喜歡使用匹配。
uj5u.com熱心網友回復:
我更喜歡在這里使用正則運算式替換:
var input = ["1 Foo", "2 Foo Bar", "No Numbers Here"];
var output = input.map(x => x.replace(/^\d /, ""));
console.log(output);
uj5u.com熱心網友回復:
只需洗掉方括號。方括號單獨表示“這組中的任何一個”,因此您匹配的是\d或\s。當您還在^ 內部添加 a 時,您并不表示字串的開頭,而是否定集合。因此,總而言之,您的正則運算式意味著:
匹配可能是除數字和空格之外的所有字符的單個字符,然后匹配所有字符。
如果您洗掉方括號,您將匹配\d 后跟\s,并且該^符號將表示“字串的開頭”。
/^\d\s(. )/
uj5u.com熱心網友回復:
如果我沒有誤讀您的問題,這可能就是您想要的:
排除在開頭捕獲數字和空格
https://regexr.com/6io1m
(?!^\d )(?!\s ).*
這匹配1 Foo Bar到Foo Bar和3 A到A
uj5u.com熱心網友回復:
您不必使用替換。您可以選擇將字串開頭的數字和空格與^(?:\d )?第 1 組中以字母開頭的行的其余部分匹配并捕獲。
請注意,如果您想使用\s它,它也可以匹配換行符。
^(?:\d )?([A-Za-z].*)
正則運算式 101 演示
const regex = /^(?:\d )?([A-Za-z].*)/;
["1 Foo", "2 Foo bar", "Test", "3 A", "-test-"]
.forEach(s => {
const m = s.match(regex);
if (m) console.log(m[1])
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/455011.html
標籤:javascript 正则表达式
