使用Javascript / jQuery将第n个制表符替换为字符串

时间:2015-03-03 14:54:45

标签: javascript textarea

我在Excel中有一行项目,当我在textarea中复制它们时,我有几个制表符。我是故意使用这个。有没有办法用新行替换第n个制表符(每个)并为每个制表插入一个特定的单词?这是我到目前为止http://jsfiddle.net/kjuxk7m9/

<textarea rows="10" cols="50" onblur="this.value=this.value.replace(/\t/g, '\n')">

基本上,当我在textarea中输入以下内容时:

Item1   Item2   Item3   Item4   Item5

(项目之间是制表符),我的结果必须是:

Name1: Item1
Name2: Item2
Name3: Item3
Name4: Item4
Name5: Item5

另外,我可能会有一个以上的制表符。我需要删除它们,以便在用新行char替换它们之后我没有空行。另外,我宁愿不使用内联javascript,即使我在示例中做到了这一点。

谢谢!

更新:

输入文字:

Item1   Item2   Item3   Item4       item6   Item7

预期结果是:

LastName: Item1
FirstName: Item2
PhoneNumber: Item3
Nickname: Item4
AnotherRandomCategory:
Blog: Item6
OtherDetail: Item7

Item5实际上是我电子表格中空单元格的一个示例,复制会添加一个额外的制表符。得到上述结果后,我可以使用代码删除该行,因为该类别没有项目。 Items是示例,它们实际上是名称,数字和其他数据。谢谢!

2 个答案:

答案 0 :(得分:1)

这适用于您的示例:

document.querySelector('textarea').addEventListener('paste', function() {
  var self= this;
  setTimeout(function() {
    self.value = 
      self.value.split(/\t+/)
      .map(function(v, index) {
        return 'Name'+(index+1)+': '+v;
      })
      .join('\r');
  },1);
});

<强> Working Fiddle

需要超时,因为textarea的值不会更新,直到之后粘贴事件。

标签字符上的文字为 split ,该数组使用 map 进行更新,然后使用join进行更新换行符。

正则表达式/\t+/会导致split忽略一行中的多个标签。

如果您更喜欢使用模糊事件,则不需要超时:

document.querySelector('textarea').addEventListener('blur', function() {
  this.value = 
    this.value.split(/\t+/)
    .map(function(v, index) {
      return 'Name'+(index+1)+': '+v;
    })
    .join('\r');
});

<小时/> 根据讨论进行更新

以下代码转换为: enter image description here

......进入这个:

enter image description here

document.querySelector('textarea').addEventListener('paste', function() {
  var self= this;
  setTimeout(function() {
    var flds=['LastName',
              'FirstName',
              'PhoneNumber',
              'Nickname',
              'AnotherRandomCategory',
              'Blog',
              'OtherDetail'
             ],
        order=[0, //LastName
               1, //FirstName
               3, //Nickname
               2, //PhoneNumber
               4, //AnotherRandomCategory
               5, //Blog
               6  //OtherDetail
              ]

    self.value = 
      self.value.split(/\t/)
      .map(function(v, index) {
        if(v==='' || index>=flds.length) {
          return '';
        }
        else {
          return index+' '+flds[index]+': '+v+'\r';
        };
      })
      .sort(function(a,b) {
        a= order[a.split(' ')[0]];
        b= order[b.split(' ')[0]];
        return a-b;
      })
      .join('')
      .replace(/\r\d+ /g,'\r')
      .substr(2);
  },1);
});

Working Fiddle #2

答案 1 :(得分:1)

您只需要我们将根据替换字符串中捕获的组操作的正则表达式/([a-z]+(\d+))/gi

我们首先删除所有空格,然后使用上面的正则表达式来相应地替换它。

document.querySelector('textarea').addEventListener('blur', function() {
   this.value = this.value.replace(/\s+/g,"").replace(/([a-z]+(\d+))/ig, "Name$2:$1\n");
});

DEMO