我在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是示例,它们实际上是名称,数字和其他数据。谢谢!
答案 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');
});
<小时/> 根据讨论进行更新
以下代码转换为:
......进入这个:
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);
});
答案 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");
});