ndu*_*ger 6 javascript regex node.js
首先,我知道大多数RegExp问题是如何进行的; 这不是其中之一,"请写我的代码"问题.
我的困惑在于,我RegExp在regexr上工作,在使用chrome的dev工具进行轮询时document.body.textContent,而不是在我在io.js中读取它之后的HTML文件.
io.js是版本1.5.1,在Windows 8上运行
为什么它会在列出的两个地方都有效,但在io.js却没有?我没有考虑到io.js读取文件的内容吗?
我RegExp应该匹配" @{each ___->___} text and line breaks @{/each}",因为它在下面的链接中,但相反,它返回null
以下是我正在尝试使用的内容:http://regexr.com/3aldk
正则表达式:
/@\{each ([a-zA-Z0-9->.]*)\}([\s\S]*)@\{\/each}/g
JS(示例):
fs.readFile('view.html', {encoding:'utf8'}, function(error, html) {
console.log(html.match(myRegExp)); // null
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<!doctype html>
<html>
<head>
<title>@{title}</title>
</head>
<body>
<h1>@{foo.bar}</h1>
<p>
Lorem ipsum dolor sit amet, @{foo.baz.hoo}
</p>
@{each people->person}
<div>
<b>@{person.name}:</b> @{person.age}
</div>
@{/each}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了一些显而易见的东西,比如一个角色,背面出现但没有服过一次?
这里的问题在于规范和实现之间的界限.
甲
-字符可以从字面上被处理,或者它可以表示的范围内.如果它是ClassRanges的第一个或最后一个字符,范围规范的开始或结束限制,或者紧跟范围规范,则按字面处理.
在无法形成范围的字符类中的其他位置处的连字符可能被解释为文字或错误.正则表达式的味道与此非常不一致.
在字符类中包含短划线减号的安全方法-是:
[a-zA-Z0-9\->.])[-.>a-zA-Z0-9])
^(例如[^-.>a-zA-Z0-9])[a-zA-Z0-9.>-])一般编码指南建议首先放置范围并使用连字符结束字符类,这样可以避免歧义并有助于提高可读性.
总结一下,您的RegEx应该成为:
/@\{each ([a-zA-Z0-9>.-]*)\}([\s\S]*)@\{\/each}/g
Run Code Online (Sandbox Code Playgroud)
作为补充提示:
你也可以重写[\s\S](任何空格字符或任何非空白字符.)[^](不是没有)
这将使您获得以下RegEx:
/@\{each ([a-zA-Z0-9>.-]*)\}([^]*)@\{\/each}/g
Run Code Online (Sandbox Code Playgroud)
JavaScript ...视为
[^]与任何单个字符匹配的否定空字符类.- 来源
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |