如何在JavaScript中使用String.match()函数

3

I have this code here:

<!DOCTYPE html>
<html>
<body>

<p id="demo">Display the result here.</p> 
<input type = "text" value = "ood" id = "txt1"/>
<script>


var myString = "How much wood could a wood chuck chuck";
var myWord = document.getElementById("txt1").value;   // ood
var myPattern = /.myWord/;        // I want this to be /.ood/
var myResult = myString.match(myPattern);

document.getElementById("demo").innerHTML = myResult;

</script>

</body>
</html>

现在我想做的是将txt1的值(ood)与myString匹配。但是像这样将变量myWord放入myPattern中:/.myWord/是不行的。需要帮忙。非常感谢。
更新:
我按照答案中的步骤做了一切,但它返回的是wood,wood而不是只有wood,我只想得到一个匹配项。就像使用/.ood/一样,这只返回一个匹配项。请帮忙解决。
此外,如果我只有输入文本中的od,如何获得单词wood。我只想用于搜索。

2
使用正则表达式构造函数语法,例如:var myPattern = new RegExp('\.' + myWord, 'gi'); - Tushar
2个回答

3
您可以使用正则表达式对象 RegExp 将字符串作为正则表达式来使用:
var myPattern = new RegExp('.'+myWord,'g'); 

演示示例

在您的情况下进行单个匹配,只需将RegExp的第二个参数从g更改为m(表示对于多行每行进行一次匹配,但在这种情况下,一个字符串只是一行)。要从"ood""od""d"或其他情况中查找单词"wood",可以这样做:

var myPattern = new RegExp("\\b\\w+"+myWord+"\\b",'m'); 

请注意,下面的评论中有一个解决方案,但这个更好。

项目\\b ... \\b表示单词边界。基本上确保它匹配一个单词。然后\\w表示任何有效的“单词字符”。因此,总的正则表达式意味着(使用myWord =“od”):

| 单词边界 | +(1个或多个单词字符)+“od”+ | 单词边界 |

这将确保它匹配字符串中任何以字符"od"结尾的单词。或者在更一般的情况下,您可以执行以下操作:

var myPattern = new RegExp("\\b\\w*"+myWord+"\\w*\\b",'m'); 

谢谢,它起作用了,而且实际上找到了匹配项,但我只想得到一次匹配。谢谢。 - Makudex
2
在这种情况下,您可以使用 RegExp('.'+myWord,'m'); 来获取单个匹配项。m 表示对每一行进行匹配。 - Spencer Wieczorek
是的,它是这样的。我不知道为什么? - Makudex
1
@wwwDELL 编辑了我上面的评论并解释了为什么会发生这种情况。因此,例如,您可以通过执行 new RegExp('.{1,2}'+myWord,'g') 来修复它,这意味着在 od 之前可以有 1 到 2 个字符。 - Spencer Wieczorek
1
@wwwDELL 是的,但它有一些额外开销。您可以通过单词将字符串拆分。然后使用 new RegExp(".+"+myWord+"$",'g'); 意思是:在每个单词上匹配 1个或多个字符 + 以"od"结尾这里有一个例子。可能有更好的方法来实现这个功能。 - Spencer Wieczorek
显示剩余5条评论

2
创建一个类似于正则表达式的对象
new RegExp('.ood','g');

就像在

var searchstring='ood' // this is the one you get in a variable ...

var myString = "How much wood could a wood chuck chuck";
var myPattern=new RegExp('.'+searchstring,'gi');
var myResult = myString.match(myPattern);

请问您能举个例子吗? - Makudex
1
字符串“ood”应该是从文本框的值动态获取的,请参见我上面的注释。 - Tushar
1
在正则表达式中,你也需要通过在前面加上 \ 来转义 . - Tushar
好的,那也可以做;-) 但是我理解OP实际上想要查找“任意字符”,而不是实际的点。 - Carsten Massmann
谢谢,它起作用了,并且实际上找到了匹配项,但我只想得到一次匹配。谢谢。 - Makudex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接