Javascript - 递增字符串的特定数字
Javascript - Incrementing specific numbers of a string
我有一个看起来像这样的字符串
id = 'CourseContent1_activityContent34169_question1_answer0_ac';
有没有更简单的方法来递增字符串中 "question1" 和 "answer0" 末尾的数字?我尝试使用以下方法分隔字符串的内容:
id = 'CourseContent1_activityContent34169_question1_answer0_ac';
idArray = id.split('_');
originalArray = idArray.slice();
if (idArray) {
idArray.pop();
for (i = 0; i < 2; i++) {
idArray.shift();
}
}
以上结果:
idArray = ["question1","answer0"];
但最终结果需要是一个字符串,我知道我稍后可能需要连接它,所以我可以将它传递给另一个参数。我只需要隔离这两个数字并只增加这两个数字。我正在寻找一种更简单的方法来完成该任务,但我还没有遇到过类似的事情。 jQuery 也不是我的选择,因为我试图仅使用 javascript 和控制台来完成此操作。预先感谢您的帮助。
您可以使用正则表达式找到字符串 "question1" 并将其替换为 "question2" - 或者更准确地说 "question{any number here}" 并替换为 "question{any other number}"
var id = 'CourseContent1_activityContent34169_question1_answer0_ac'
var re = /question\d+/
var id2 = id.replace(re,"question2")
您可以对 answer\d+
执行相同的操作
你应该使用 RegExp 的替换函数:
请运行下例:
var id = 'CourseContent1_activityContent34169_question1_answer0_ac';
alert('before:\r' + id)
id = id.replace(/question([0-9]+).*answer([0-9]+)/, function(a, b, c) {
return 'question' + (parseInt(b) + 1) + '_answer' + (parseInt(c) + 1)
// Using parseInt to convert string to number
})
alert('after:\r' + id)
这里有一些不那么冗长的方法:
var increment = function(_, prefix, n) { return prefix + (+n + 1) };
id.replace(/(question)(\d+)/, increment).replace(/(answer)(\d+)/, increment);
带括号的匹配项(即捕获组)作为单独的参数传递给替换函数,您可以在那里递增它们并使用相应的前缀 return。
function updateQA(question, answer) {
return 'CourseContent1_activityContent34169_question1_answer0_ac'.replace(/^(.*question)(\d*)(_answer)(\d*)(.*)/gi, '' + question + '' + answer + '');
}
你可以试试这个:
var id = 'CourseContent1_activityContent34169_question1_answer0_ac';
var incrementQuestion = function (id) {
return id.replace(/question([0-9]+)/, function (val1, val2) {
return "question" + (parseInt(val2) + 1)
}) }
var incrementAnswer = function (id) {
return id.replace(/answer([0-9]+)/, function (val1, val2) {
return "answer" + (parseInt(val2) + 1)
}) }
然后递增使用:
id = incrementAnswer(id);
和
id = incrementQuestion(id);
我有一个看起来像这样的字符串
id = 'CourseContent1_activityContent34169_question1_answer0_ac';
有没有更简单的方法来递增字符串中 "question1" 和 "answer0" 末尾的数字?我尝试使用以下方法分隔字符串的内容:
id = 'CourseContent1_activityContent34169_question1_answer0_ac';
idArray = id.split('_');
originalArray = idArray.slice();
if (idArray) {
idArray.pop();
for (i = 0; i < 2; i++) {
idArray.shift();
}
}
以上结果:
idArray = ["question1","answer0"];
但最终结果需要是一个字符串,我知道我稍后可能需要连接它,所以我可以将它传递给另一个参数。我只需要隔离这两个数字并只增加这两个数字。我正在寻找一种更简单的方法来完成该任务,但我还没有遇到过类似的事情。 jQuery 也不是我的选择,因为我试图仅使用 javascript 和控制台来完成此操作。预先感谢您的帮助。
您可以使用正则表达式找到字符串 "question1" 并将其替换为 "question2" - 或者更准确地说 "question{any number here}" 并替换为 "question{any other number}"
var id = 'CourseContent1_activityContent34169_question1_answer0_ac'
var re = /question\d+/
var id2 = id.replace(re,"question2")
您可以对 answer\d+
你应该使用 RegExp 的替换函数:
请运行下例:
var id = 'CourseContent1_activityContent34169_question1_answer0_ac';
alert('before:\r' + id)
id = id.replace(/question([0-9]+).*answer([0-9]+)/, function(a, b, c) {
return 'question' + (parseInt(b) + 1) + '_answer' + (parseInt(c) + 1)
// Using parseInt to convert string to number
})
alert('after:\r' + id)
这里有一些不那么冗长的方法:
var increment = function(_, prefix, n) { return prefix + (+n + 1) };
id.replace(/(question)(\d+)/, increment).replace(/(answer)(\d+)/, increment);
带括号的匹配项(即捕获组)作为单独的参数传递给替换函数,您可以在那里递增它们并使用相应的前缀 return。
function updateQA(question, answer) {
return 'CourseContent1_activityContent34169_question1_answer0_ac'.replace(/^(.*question)(\d*)(_answer)(\d*)(.*)/gi, '' + question + '' + answer + '');
}
你可以试试这个:
var id = 'CourseContent1_activityContent34169_question1_answer0_ac';
var incrementQuestion = function (id) {
return id.replace(/question([0-9]+)/, function (val1, val2) {
return "question" + (parseInt(val2) + 1)
}) }
var incrementAnswer = function (id) {
return id.replace(/answer([0-9]+)/, function (val1, val2) {
return "answer" + (parseInt(val2) + 1)
}) }
然后递增使用:
id = incrementAnswer(id);
和
id = incrementQuestion(id);