如何将标点符号从字符串的开头或中间移动到结尾

时间:2017-08-30 17:24:02

标签: javascript regex

我有一个Pig Latin翻译器,我已经设置了单字符串或多字符串,但它不能用标点符号。

实际上,translatePigLatin("Pig Latin");会返回'Igpay Atinlay',但translatePigLatin("Pig Latin.");会返回'Igpay Atin.lay',并且句点会在一个单词的中间恼人地返回。如何让它返回'Igpay Atinlay.'

功能是:

function translatePigLatin(string) {
  var arr = string.split(' ');
  var str;
  for (var i = 0; i < arr.length; i++) {
    var j = 0;
    if (!/[\d]/.test(arr[i])) {
      while (/[^aeiou]/i.test(arr[i][j])) {
        j++;
      }
      if (j > 0) {
        arr[i] = arr[i].slice(j) + arr[i].slice(0, j) + 'ay';
      } else {
        arr[i] = arr[i] + 'way';
      }
    }
    if (/[A-Z]/.test(arr[i])) {
      arr[i] = toTitleCase(arr[i]);
    }
  }
  return arr.join(' ');
}

function toTitleCase(str) {
  return str.replace(/\w\S*/g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });
}

1 个答案:

答案 0 :(得分:0)

您可以使用此功能:

function punct(str)
{
  var punctuation = ".,!@#$";
  var matches = 0;
  for(var i=0;i<str.length-matches;i++)
  {
    if(punctuation.indexOf(str[i])!=-1)
    {
      str = str.substr(0,i) + str.substr(i+1)+str[i--];
      matches++;
    }
  }
  return str;
}

使用for循环遍历你的字符串,如果它在标点字符串中找到一个字符,它会在字符串的末尾移动该字符。所以punct(&#34; Igpay Atin.lay&#34;)产生&#34; Igpay Atinlay。&#34;。给它一个机会。