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);