我正在使用JavaScript来包含文本框和textarea。按钮调用一个函数来确定文本框中的字符串是否在textarea的内容中找到。当然,如果找到字符串,则向用户发送消息。
这是我的代码:
HTML
<textarea id="textbox3" rows="4" cols="50"></textarea>
<input id="text3" value="" />
<button id="findTextButton" onclick="findText();">
#2 Find text from textbox in textarea
</button>
的JavaScript
function findText() {
var txtThree = document.getElementById("textbox3").value;
var searchWord = document.getElementById("text3").innerHTML.value;
var globalSearch = /[a-z]/g;
var deliver = txtThree.match(globalSearch);
if (searchWord === "") {
alert("Please Enter Text");
} else {
alert(deliver);
}
}
我想要做的是在globalSearch函数中调用变量searchWord,但它不允许我这样做。
答案 0 :(得分:1)
好吧,我想我得到你想要的东西......你有一个textarea和一个文本输入框。你想从输入框中获取文本并查看textarea中是否有匹配项?
除非您打算做更复杂的事情,否则您不需要RegExp。 .search()可以使用RegExp或String。(在这种情况下,来自&#34; text3&#34;的值)。 你也检查searchWord是否为空早。如果Javascript遇到一个错误,整个事情就会关闭。
function findText() {
var txtThree = document.getElementById("textbox3").value;
//var searchWord = document.getElementById("text3").innerHTML.value;
//Take away the .innerHTML above
var searchWord = document.getElementById("text3").value;
//var globalSearch = /[a-z]/g;
//You shouldn't need a RegExp.
if (searchWord === "") {
alert("Please Enter Text");
} else {
var deliver = txtThree.match(searchWord);
alert(deliver);
}
}
我对此进行了测试,它对我来说很好。如果这是你所期待的。
我将补充说@UselessCode使用新的RegExp(searchWord)的答案是个好主意。
答案 1 :(得分:0)
在您的代码中,$string = substr(strstr($string,'1037'),4,6);
是一个正则表达式literal,它永远不会改变,并且总会找到相同的东西。表达式globalSearch
表示在/[a-z]/g
和a
之间找到一个字符。 z
修饰符使其成为global search,这意味着即使在找到第一个匹配项后它也会继续搜索和匹配。
因此,当您运行g
时,match将返回包含txtThree.match(globalSearch)
中所有字母的单字符字符串数组。例如,如果txtThree
包含字符串txtThree
,则会返回数组'This is a test.'
。
您无法使用RegExp文字来搜索不同的内容。但是,一旦您拥有[ "h", "i", "s", "i", "s", "a", "t", "e", "s", "t" ]
,就可以使用RegExp constructor function生成动态RegExp:
searchWord
您可以将var rxSearch = new RegExp(searchWord);
var result = txtThree.match(rxSearch);
修饰符作为第二个参数中的一个标记提供给g
,但是因为您只是想确定 字符串是否在那里是的,一旦你找到它就不需要继续搜索。
match要么返回一个匹配数组(在这种情况下为单元素数组,因为我们没有使用RegExp
修饰符)或g
如果匹配不是找到。自arrays are truthy and nulls are falsey起,我们可以在null
语句中使用result
来测试是否找到了任何内容:
if
作为Buildersrejected points out,RegEx对于这种情况有点过分。如果我从头开始处理这个问题,我可能会使用indexOf
代替:
if (result) {
alert('Found somthing!');
} else {
alert('It\'s not there.');
}
在这种情况下,性能并不重要,但如果确实如此,使用if (txtThree.indexOf(searchWord) !== -1) {
alert('Found somthing!');
} else {
alert('It\'s not there.');
}
会比使用search
更快。 indexOf
实际上将普通字符串作为参数,indexOf
采用正则表达式,如果提供了字符串,则在使用之前将其转换为正则表达式。