JavaScript regExp返回" null"

时间:2014-06-26 19:44:04

标签: javascript jquery regex function methods

我制作正则表达式以匹配1 li中1 ul中的所有textarea。每次单击该按钮,它都会返回值null

这里是Fiddle

这是function(){...}的样子:

function doIt() {
    var input = document.getElementById("input");
    var patt = /^<ol>{1}\n+\s?[<li>\w+<\/li>]+\n+<\/ol>{1}$/;
    alert(input.value.match(patt));
} 

我真的不知道为什么patt不起作用......

这是逻辑(用我自己的话说):

  • ^ - 起点
  • <ol>{1} - 寻找1 <ol>
  • \n+ - 查找一个或多个新行
  • \s? - 查找0个或更多(可选)空格
  • [<li>\w+<\/li>]+ - 查找包含1个或多个字符的1个或多个<li></li>
  • \n+ - 查找一个或多个新行
  • <\/ol>{1} - 寻找1 </ol>
  • $ - 结束点

  • 我希望[<li>\w+<\/li>]+返回一个或多个类似:<li>Hello world :)</li>
  • 的内容

基本上,任何事情都可以在<li></li>之间。

2 个答案:

答案 0 :(得分:1)

方括号意味着匹配括号之间的任何单个字符。

您想要将<li></li>拉出括号之类的内容 - 例如\<li\>.*\<\\li\>

答案 1 :(得分:1)

以下是您的模式实际执行的操作:

^                — Maches the beginning of the string
<ol              — Matches "<ol"
>{1}             — matches ">" one time
\n+              — Matches 1 or more new lines
\s?              — Matches 1 whitespace character (optional)
[<li>\w+<\/li>]+ — Matches any of the characters in "<>A-Za-z_/" 1 or more times
\n+              — Matches 1 or more new lines
<\/ol            — Matches "</ol"
>{1}             — Matches ">" one time
$                — Matches the end of the string

当你匹配字符串的开头和结尾时,模式必须匹配整个字符串,而不是字符串的一部分。

如果你只将它放在textarea中,模式将匹配它:

<ol>
<li>Helloworld</li><li>Hellohowareyou</li><li>good</li>
</ol>

你宁愿想要这样的东西:

var patt = /<ol>\s*(?:<li>[\w !:)]+<\/li>\s*)+<\/ol>/;

说明:

<ol>             — Matches "<ol>"
\s*              — Matches zero or more whitespace characters (including newlines)
(?:              — Starts a non-capturing group
<li>             — Matches "<li>"
[\w+ !:)]+       — Matches any of the characters in "A-Za-z_ !:)" 1 or more times
<\/li>           — Matches "</li>"
\s*              — Matches zero or more whitespace characters
)                — Ends the group
+                — Repeats the group one or more times
\n+              — Matches 1 or more new lines
<\/ol>           — Matches "</ol>"

演示:http://jsfiddle.net/3jthN/2/