我有一個字串陣列和字串中#number-number任何地方的模式。
要求:
如果 # 和前面的單個數字由連字符替換,則替換 # 并添加 0。例如,
#162-7878=>162-7878、#12-4598866=>12-4598866如果 # 和前面的兩位或多位數字由連字符替換,則替換洗掉 #。例如,
#1-7878=>01-7878。如果連字符前面沒有 # 和單個數字,則添加 0。例如,
1-7878=>01-7878。
我被卡住了,如何在 JavaScript 中做。這是我使用的代碼:
let arrstr=["#12-1676","#02-8989898","#676-98908098","12-232","02-898988","676-98098","2-898988", "380100 6-764","380100 #6-764","380100 #06-764"]
for(let st of arrstr)
console.log(st.replace(/#?(\d)?(\d-)/g ,replacer))
function replacer(match, p1, p2, offset, string){
let replaceSubString = p1 || "0";
replaceSubString = p2;
return replaceSubString;
}
uj5u.com熱心網友回復:
我建議#在字串的開頭選擇匹配,然后在- 一個數字之前捕獲一個或多個數字,以便稍后用前導零填充這些數字并省略#結果中的前導:
st.replace(/#?\b(\d )(?=-\d)/g, (_,$1) => $1.padStart(2,"0"))
請參閱 JavaScript 演示:
let arrstr=["#12-1676","#02-8989898","#676-98908098","12-232","02-898988","676-98098","2-898988", "380100 6-764","380100 #6-764","380100 #06-764"]
for(let st of arrstr)
console.log(st,'=>', st.replace(/#?\b(\d )(?=-\d)/g, (_,$1) => $1.padStart(2,"0") ))
正/#?\b(\d )(?=-\d)/g則運算式匹配所有出現的
#?- 一個可選#字符\b- 單詞邊界(\d )- 捕獲組 1:一位或多位數字...(?=-\d)- 后面必須跟一個-和一個數字(這是一個肯定的前瞻,它只檢查其模式是否立即匹配到當前位置的右側,而不實際使用匹配的文本)。
uj5u.com熱心網友回復:
使用unary operator,這里有兩個線性replacer函式。
const testValues = ["#162-7878", "#12-4598866", "#1-7878", "1-7878"];
const re = /#?(\d ?)-(\d )/;
for(const str of testValues) {
console.log(str.replace(re, replacer));
}
function replacer(match, p1, p2) {
p1 = p1 < 10 ? `0${p1}` : p1;
return `${p1}-${p2}`;
}
uj5u.com熱心網友回復:
let list_of_numbers =["#1-7878", "#162-7878", "#12-1676","#02-8989898","#676-98908098","12-232","02-898988","676-98098","2-898988"]
const solution = () => {
let result = ''
for (let number of list_of_numbers) {
let nums = number.split('-')
if (nums[0][0] == '#' && nums[0].length > 2) {
result = `${nums[0].slice(1, number.length-1)}-${nums[1]}`
console.log(result)
} else if (nums[0][0] == '#' && nums[0].length == 2) {
result = `${nums[0][0] = '0'}${nums[0][1]}-${nums[1]}`
console.log(result)
} else {
console.log(number)
}
}
}
uj5u.com熱心網友回復:
我認為一個簡單的檢查是你應該用 match 函式做什么。
let arrstr=["#12-1676","#0-8989898","#676-98908098","12-232","02-898988","676-98098","2-898988"];
const regex = /#\d-/g;
for(i in arrstr){
var found = arrstr[i].match(regex);
if(found){
arrstr[i]=arrstr[i].replace("#","0")
}else{
arrstr[i]=arrstr[i].replace("#","")
}
}
console.log(arrstr);
或者如果你真的想堅持你擁有它的方式。
let arrstr=["#12-1676","#02-8989898","#6-98908098","12-232","02-898988","676-98098","2-898988"]
for(let st of arrstr)
console.log(st.replace(/#(\d)?(\d-)/g ,replacer))
function replacer(match, p1, p2, offset, string){
let replaceSubString = p1 || "0";
replaceSubString = p2;
return replaceSubString;
}
除掉 '?' 來自正則運算式,所以它不是#?只是 #
uj5u.com熱心網友回復:
像這樣的東西可以作業。
let arrstr = ["#12-1676","#02-8989898","#676-98908098","12-232","02-898988","676-98098","2-898988"]
for (const st of arrstr) {
console.log(st.replace(/(^#?)(\d )(?=-)/ ,replacer))
}
function replacer(match, p1, p2) {
if (p2.length === 1) {
return '0' p2;
} else {
return p2;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/410750.html
標籤:
上一篇:如何從字串中分離浮點數
下一篇:如何將字串轉換為函式的引數?
