JavaScript中的RegExp,当量词是模式的一部分时

时间:2012-07-30 20:21:39

标签: javascript regex

我一直在尝试使用匹配插入符号之间的任何文本的正则表达式,小于和大于插入符号。

所以它看起来像:^<我想要选择的文字> ^

我尝试了类似的东西,但它不起作用:^<(。*?)> ^

我认为这是可能的,对吗?我认为我经历过如此艰难时期的原因是因为插入符号可以作为量词。谢谢你的帮助!

更新

只是所以每个人都知道,他们跟着我而不是我工作

 /\^<(.*?)>\^/

但事实证明,由于我使用.innerHTML属性获取字符串,因此我获得了html实体。换句话说,

> ... &gt;
< ... &lt;

要解决这个问题,我的正则表达式实际上是这样的:

\^&lt;(.*?)((.|\n)*)&gt;\^

这包括两者之间的字符串应该是任何字符或新行的事实。谢谢!

2 个答案:

答案 0 :(得分:4)

您需要转义^符号,因为它在JavaScript正则表达式中具有特殊含义。

 /\^<(.*?)>\^/

在JavaScript正则表达式中,^表示字符串的开头,除非使用了m修饰符,在这种情况下,它意味着行的开头

答案 1 :(得分:0)

这应该有效:

\^<(.*?)>\^

在正则表达式中,如果要使用具有特殊含义的字符(插入符号,括号,管道......),则必须使用反斜杠将其转义。例如,(\w\b)*\w\.将选择以点结尾的单词序列。

小心!

如果必须将正则表达式模式作为字符串传递,即javascript或perl中没有正则表达式文字,则可能必须使用 double 反斜杠,编程语言将转义为单个,然后由正则表达式引擎处理 多种语言的相同正则表达式:

Python:
  import re
  myRegex=re.compile(r"\^<(.*?)>\^") # The r before the string prevents backslash escaping
PHP:
  $result=preg_match("/\\^<(.*?)>\\^/",$subject); // Notice the double backslashes here?
JavaScript:
  var myRegex=/\^<(.*?)>\^/,
      subject="^<blah example>^";
  subject.match(myRegex);

如果您告诉我们您正在编写的编程语言,我们将能够为您提供一些完整的代码。

编辑:哎呀,甚至没有注意到这被标记为javascript。然后,您根本不必担心双反斜杠。

编辑2:\b代表word boundary。虽然我同意你的意思,但我自己也会使用它。