JavaScript中的正则表达式比较

3
<!DOCTYPE html>
<html>
 <head>
   <title>hhh</title>
 </head>
<body>
  <input type="text" id="fname" onkeyup="myFunction()">

 <script>
  function myFunction() {
  var re1 =/./;
  var x = document.getElementById("fname");
  if(x.value==re1){
  var h = document.createElement("H1");
  var t = document.createTextNode(x.value);
  h.appendChild(t);
  document.body.appendChild(h);}

  else if (x.value=="## a"){
  var h = document.createElement("H2");
  var t = document.createTextNode(x.value);
  h.appendChild(t);
  document.body.appendChild(h);}
 }
 </script>

 </body>

我正在尝试从头开始创建一个Markdown编辑器,其中JavaScript代码尝试使用正则表达式比较x.value,但不起作用。请帮助我将(#string)与x.value进行比较,然后将其输出为H1标题。虽然H2部分有效,但当我输入(# a)时出现问题。


1
你应该阅读一些关于如何使用正则表达式的文档和示例。提示:==不能用于将字符串与正则表达式匹配。有相应的方法可以实现。 - trincot
1
你应该用另一种方法来实现,但是是的,你可以使用正则表达式来做到这一点,所以这是一个简单的加粗处理示例:data.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>") - Maciej Kozieja
HTML很容易解析。HtmlParser非常好用。如果不允许使用库,那么你应该自己创建一个简单的解析器。 - zhon
3个回答

2
通过使用if (x.value==re1),你试图比较一个字符串和一个RegExp对象的相等性,这将始终为false。相反,使用RegExp对象的.test()方法:

if (re1.test(x.value))

(参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test)

在你的情况下,RegExp.prototype.test()比使用String.prototype.match()表现更好,因为后者(不必要地)计算并返回字符串中识别的匹配项数组,而你只需要知道是否有匹配项。


问题已完全解决了吗?如果是,请让我知道,并将此答案选为正确答案。 - jamison

1
你可以尝试以下操作:
if (x.match(/ ./g))

或者

if (x.match(rel))

3
/g.test(str) //将返回字符串是否有匹配项 - Maciej Kozieja

-2
你正在使用正则表达式对象检查字符串,因此你需要像以下这样使用RegExp来检查RegExp:
if(new RegExp(x.value) === re1){
    // Match
}

不是 OP 寻找的内容,而且也永远不会成立。 - trincot

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