Javascript 重新使用正则表达式分隔符

Javascript 重新使用正则表达式分隔符,javascript,regex,Javascript,Regex,我对此有点困惑,不知道如何重新插入非单词字符,例如“-”和“!”。我使用regex作为一种基于这些分隔符进行拆分的方法,但需要保留“-”和“!”的索引,并在将其从数组转换回字符串后重新引入。期望的输出是“e6t-r3s是r4y乐趣!”到目前为止,我得到了: “e6t R3非常有趣” 编写一个函数,该函数接受一个字符串,并按照相同的规则将该字符串中长度为4或更大的任何和所有“单词”(见下文)转换为缩写 缩写(“骑大象真的很有趣!” 函数缩写(字符串){ var数组=string.split(/\W

我对此有点困惑,不知道如何重新插入非单词字符,例如“-”和“!”。我使用regex作为一种基于这些分隔符进行拆分的方法,但需要保留“-”和“!”的索引,并在将其从数组转换回字符串后重新引入。期望的输出是“e6t-r3s是r4y乐趣!”到目前为止,我得到了: “e6t R3非常有趣”

编写一个函数,该函数接受一个字符串,并按照相同的规则将该字符串中长度为4或更大的任何和所有“单词”(见下文)转换为缩写

缩写(“骑大象真的很有趣!”

函数缩写(字符串){
var数组=string.split(/\W/);
var newArray=[];
for(var i=0;i=4){
//concat第一个索引,中间索引的计数,最后一个索引
var innerChar=word.substring(1,word.length-1);
var indCount=innerChar.length;
var abbrWord=word.charAt(0)+indCount+word.charAt(word.length-1);
newArray.push(缩写);
}否则{
newArray.push(word);
}
}
返回newArray.join(“”);
}

如果您能够使用以下功能,那么您的代码可以简单得多:

函数缩写(str){
返回str.replace(/[a-z]{4,}/ig,函数(word){
返回字[0]+(word.length-2)+字[word.length-1];
})
}
log(缩写为“骑大象真有趣!”);

console.log(缩写为“可访问性”)
delim=string.split(originalWord)[1]对于结尾带有分隔符(例如不是最后一个单词或重复)的单词,您可以通过单个空格进行连接。然后也可以用
来分割,而不是用
/\W/
来表示非单词字符。谢谢!我是这方面的初学者,我会尝试去理解你的代码……虽然它不符合其中一个规范,“可访问性”——预期为:“A11y”,而不是“Ac10y”@chyltse。您可以在正则表达式的
g
修饰符之后添加
i
修饰符。或者使用
\w
。使用组的另一个版本是:
str.replace(/(\w)(\w{2,})(\w)/g,(\uz,a,b,c)=>a+b.length+c)@chyltse固定混合案例issue@WashingtonGuedes这不是因为原始问题包含“长度为4或更大的字符串”condition@WashingtonGuedestrue,忘记了正则表达式量词:)
function abbreviate(string) {
    var array = string.split(/\W/); 
    var newArray = [];
    for (var i = 0; i < array.length; i++) {//iterates through each word
      var word = array[i];
      var abbrString = "";
      if (word.length >= 4) {
          //concat first index,count of indexes in between, last index
          var innerChar = word.substring(1, word.length - 1);
          var indCount = innerChar.length;
          var abbrWord = word.charAt(0) + indCount + word.charAt(word.length-1); 
          newArray.push(abbrWord);
        } else {
          newArray.push(word);
        }

    }
  return newArray.join(" ");
}