在Textarea的内容上使用.match()

时间:2017-01-06 18:13:27

标签: javascript jquery

我做了一些搜索,发现了一些类似于我的问题,但我希望有一个解决方案可以纠正我之前存在的代码。

如果你想看到整件事,可以使用以下代码:http://codepen.io/JTBennett/pen/ygyZwE

$('#ST_txt_write').keyup(function(){
var childText = $('#ST_cmp_body').text();
var count = (childText.match(/hi/g) || []).length;
$('#ST_KW').html(count);
});

问题在于我无法使用匹配函数来处理textarea,因此用户可以在框中键入他们想要的内容,这将是代码寻求匹配的内容。我尝试创建一个返回框的文本内容的变量(就像你在那里看到的childText var一样),但这只会匹配一次而不是计数。

对于正确方向的任何帮助都将非常感激。对不起,我对jQuery或其他任何事情都不是很了解。

1 个答案:

答案 0 :(得分:1)

您在问题中提供的示例与您的codepen有重要区别。在你的问题中,你有一个你正在传递给.match()的正则表达式字面值,并且在你的codepen中,你将一个字符串传递给.match()您需要做的是使用new RegExp()创建一个新的正则表达式并将其传递给全局标记。

代码如下:

$('#ST_txt_write').keyup(function(){
  var childText = $('#ST_cmp_body').val();
  var KW = $('#ST_KW_txt').val();
  var regex = new RegExp(KW, 'g'); // <--- This creates a regex from the string in KW
  var count = (childText.match(regex) || []).length; // <-- Use regex here instead of string
  $('#ST_KW').html(count);
});

这是一个有效的例子:

&#13;
&#13;
$(function() {
  $('#ST_txt_write').keyup(function() {
    var childText = $('#ST_cmp_body').val();
    var KW = $('#ST_KW_txt').val();
    var regex = new RegExp(KW, 'g');
    var count = (childText.match(regex) || []).length;
    $('#ST_KW').text(count);
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ST_txt_write">
  <textarea id="ST_cmp_body" style="height: 200px; width: 300px;"></textarea>
</div>
<div>
  Keywords:
  <input type="text" id="ST_KW_txt" />
</div>
<div>
  # of Keywords Found: <span id="ST_KW"></span>
</div>
&#13;
&#13;
&#13;