我将如何将字符串拆分为字符 - Javascript
How would I go about splitting a string into characters - Javascript
我想拆分一个字符串,比如这样:
"Hello $id1, how are you $id2 etc...",
但“$idInt”不应拆分:
const test = [
"$id1",
"$id2",
"$id3"
]
let str = "test $id1!";
str = str.split("");
// wanted result: ["t", "e", "s", "t", " ", "$id1", "!"];
// actual result: ["t", "e", "s", "t", " ", "$", "i", "d", "1" "!"]
这将从“测试”数组中获取任何内容,而不是将其拆分为每个单独的字符。
我只搜索了其他资源,但未能找到完全符合我要求的内容。
我也得到了这个代码:
let reg = /\%\[a-zA-Z0-9]\:[0-9]+\%/gim;
let yourstring = 'Some thinger %09ff:13%';
let matches = reg.exec(yourstring);
let records = [];
let pieces = [];
if (matches != null) {
for (let [i, match] of Array.from(matches).entries()) {
let start = yourstring.indexOf(match);
let end = match.length + start;
records.push({
start: start,
end: end,
match: match,
});
}
records.sort((a, b) => (a.start > b.start ? 1 : a.start < b.start ? -1 : 0));
if (records[0].start > 0) {
records = [{
start: 0,
end: 0,
match: ""
}].concat(records);
}
for (let i = 1; i < records.length; i++) {
pieces.push(yourstring.slice(records[i - 1].end, records[i].start).replace(......)); // replace goes here
pieces.push(records[i].match);
}
yourstring = pieces.join("")
} else {
yourstring = yourstring.replace(.......) // replace goes here
}
但它是正则表达式,我希望一组字符串不被替换,而不是这里用正则表达式
你应该像这样使用分割函数:
let str1 = "test %id:1%!"
let arr1 = str1.split('%')
let test = [];
// arr1 will become ['test ','id:1','!']
// every alternate one will become one of the usable one.
arr1.forEach((x,index)=>{
if (index%2 == 1) {
// push in test and add the '%'s back in.
test.push(`%${x}%`)
}
})
我建议使用 match
而不是 split
:
let s = "Hello %id:1%, how are you %id:2% etc...";
let result = s.match(/%id:\d+%|./gs);
console.log(result);
Trincot 的回答更好,但我已经写过了,所以这里是...
var str = "Hello %id:1%, how are you %id:2% etc...";
console.log(splitStr(str));
function splitStr(str) {
var is_var = false;
var chars = [];
var group = '';
for (var i = 0; i < str.length; i++) {
let char = str[i];
if (is_var) {
group += char;
if ('%' == char) {
chars.push(group);
group = '';
is_var = false;
}
} else {
if ('%' == char) {
group += char;
is_var = true;
}else{
chars.push(char);
}
}
}
return chars;
}
我想拆分一个字符串,比如这样:
"Hello $id1, how are you $id2 etc...",
但“$idInt”不应拆分:
const test = [
"$id1",
"$id2",
"$id3"
]
let str = "test $id1!";
str = str.split("");
// wanted result: ["t", "e", "s", "t", " ", "$id1", "!"];
// actual result: ["t", "e", "s", "t", " ", "$", "i", "d", "1" "!"]
这将从“测试”数组中获取任何内容,而不是将其拆分为每个单独的字符。
我只搜索了其他资源,但未能找到完全符合我要求的内容。
我也得到了这个代码:
let reg = /\%\[a-zA-Z0-9]\:[0-9]+\%/gim;
let yourstring = 'Some thinger %09ff:13%';
let matches = reg.exec(yourstring);
let records = [];
let pieces = [];
if (matches != null) {
for (let [i, match] of Array.from(matches).entries()) {
let start = yourstring.indexOf(match);
let end = match.length + start;
records.push({
start: start,
end: end,
match: match,
});
}
records.sort((a, b) => (a.start > b.start ? 1 : a.start < b.start ? -1 : 0));
if (records[0].start > 0) {
records = [{
start: 0,
end: 0,
match: ""
}].concat(records);
}
for (let i = 1; i < records.length; i++) {
pieces.push(yourstring.slice(records[i - 1].end, records[i].start).replace(......)); // replace goes here
pieces.push(records[i].match);
}
yourstring = pieces.join("")
} else {
yourstring = yourstring.replace(.......) // replace goes here
}
但它是正则表达式,我希望一组字符串不被替换,而不是这里用正则表达式
你应该像这样使用分割函数:
let str1 = "test %id:1%!"
let arr1 = str1.split('%')
let test = [];
// arr1 will become ['test ','id:1','!']
// every alternate one will become one of the usable one.
arr1.forEach((x,index)=>{
if (index%2 == 1) {
// push in test and add the '%'s back in.
test.push(`%${x}%`)
}
})
我建议使用 match
而不是 split
:
let s = "Hello %id:1%, how are you %id:2% etc...";
let result = s.match(/%id:\d+%|./gs);
console.log(result);
Trincot 的回答更好,但我已经写过了,所以这里是...
var str = "Hello %id:1%, how are you %id:2% etc...";
console.log(splitStr(str));
function splitStr(str) {
var is_var = false;
var chars = [];
var group = '';
for (var i = 0; i < str.length; i++) {
let char = str[i];
if (is_var) {
group += char;
if ('%' == char) {
chars.push(group);
group = '';
is_var = false;
}
} else {
if ('%' == char) {
group += char;
is_var = true;
}else{
chars.push(char);
}
}
}
return chars;
}