我有以下textarea代码。
<textarea id="message" name="message"></textarea>
我需要获取textarea的值并跟踪消息内容并提取出散列的关键字(#)。
当我点击提交按钮时。我应该得到的关键词是“大声笑”,“哈哈”和“消息”。
我正在使用jquery。谁能给我一些关于如何去做的建议?
答案 0 :(得分:3)
根据评论,在空白处拆分,然后通过检查第一个字符来使用Array.prototype.reduce
。
的Javascript
var message = "This is my message #message #lol #haha";
var wanted = message.split(/\s/).reduce(function (previous, word) {
if (word.charAt(0) === "#") {
previous.push(word.slice(1));
}
return previous;
}, []).join(" ");
console.log(wanted);
输出
message lol haha
上
或者使用Array.prototype.filter
和Array.prototype.map
的Javascript
var message = "This is my message #message #lol #haha";
var wanted = message.split(/\s/).filter(function (word) {
return word.charAt(0) === "#";
}).map(function (word) {
return word.slice(1);
}).join(" ");
console.log(wanted);
上
注意:上述所有Array
方法都需要在ECMA5之前的浏览器上使用垫片,这些浏览器可在各自的MDN页面上使用或使用es5_shim
其他替代方案,如果您愿意,将使用Array.prototype.forEach
(需要垫片),for
或while
来执行循环元素和Array.prototype.slice
和Array.prototype.push
相关元素。
答案 1 :(得分:1)
// You split the words with the space
var arrayContainingEveryWords = $("#message").val().split(" ");
var desiredWords = [];
// For each word within the text area
for (var i = 0; i < arrayContainingEveryWords.length; i++)
{
var word = arrayContainingEveryWords[i];
// If the first letter of the word is a #
if (word.charAt(0) == "#")
{
// Add the word (minus the #) to an array
desiredWords.push(word.slice(1));
}
}
console.log(desiredWords);
答案 2 :(得分:1)
var str = "This is my message #message #lol #haha";
// or var str = $('#message').val();
var words = str.split(' ');
words = $(words).map(function (i,v) {
if(v.indexOf('#') === 0)return v.replace("#",'');
}).get();
console.log(words);
//output `==>` ["message", "lol", "haha"]
演示--->
http://jsfiddle.net/vTpSk/2/
答案 3 :(得分:1)
使用RegExp /(?:\s|^)#([^\s]+)/g
与String.prototype.match
,即空格或行首,然后是#
,然后是非空格。
var m = 'This is my message #message #lol #haha'.match(/(?:\s|^)#([^\s]+)/g);
// [" #message", " #lol", " #haha"]
然后,您可以使用首选循环遍历这些循环,例如for
var i, found = [], u;
for (var i = 0; i < m.length; ++i) {
u = m[i];
if (u.charAt(1) === '#') u = u.slice(2);
else u = u.slice(1);
found.push(u);
}
found; // ["message", "lol", "haha"]
使用相同的 RegExp ,由于我设置捕获组的方式,您可以使用String.prototype.replace
同时剥离和捕获。
var found = [], str = 'This is my message #message #lol #haha';
str = str.replace(
/(?:\s|^)#([^\s]+)/g,
function (m, keyword) {
found.push(keyword);
return '';
}
);
str; // "This is my message"
found; // ["message", "lol", "haha"]
此处稍作修改也可让您使用replace
捕获它们而不删除它们,(函数中的return m
或只保留字符串的另一个副本)。< / p>
答案 4 :(得分:1)
您可以使用一个简单的正则表达式:\B#\w+
。
var keywords = 'This is my message #message #lol #haha'.match(/\B#\w+/g);
如果需要,请删除#
:
keywords = keywords.map(function(k) { return k.substring(1); });
// or jQuery, for compatibility:
keywords = $.map(keywords, function() { return this.substring(1); });
或使用循环:
var keywords = [];
var keyword;
var re = /\B#(\w+)/g;
while(keyword = re.exec('This is my message #message #lol #haha')) {
keywords.push(keyword[1]);
}
答案 5 :(得分:-2)
在字符串上使用.split('#')
来获取单词数组,然后在每个项目上使用.trim()
来删除空格。