我制作正则表达式以匹配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>
之间。
答案 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>"