捕获一组两个特殊字符之间的所有内容,但允许角色在正文中出现一次
Capture everything between a group of two special characters, but allow the character to appear once in the body
我想捕捉##
组之间的一切。在下面的文字"这是##示例##我正在##当前##测试"中,我想得到以下匹配:example
和currently
。我把它缩小到这个规则:/##([^'#]+)##/g
.该规则有两个缺点:
- 它返回"自定义边界"(即
##example##
,而不是example
)和 - 当"匹配"中只有一个
#
时,它不起作用(即##ex#ample##
)。
我需要更改什么才能使其按预期工作?
只需匹配标记之间的任何字符,并通过在量词+
后添加?
使其不贪婪:
/##(.+?)##/g
匹配的结果是第一项中的整个匹配,然后是所有匹配的组。由于模式中有一个组,因此索引 1 处的标记之间将包含内容,即 match[1]
var text = "this is the ##exa#mple## I am ##currently## testing on";
var re = /##(.+?)##/g;
var match;
while ((match = re.exec(text)) != null) {
// show match in the Stackoverflow snippet
document.write(match[1] + '<br>');
}
注意:模式中的.
匹配任何非换行符。您也可以改用['W'w]
来允许换行。
只需像下面这样更改您的正则表达式,然后从组索引 1 中获取您想要的字符串。
##((?:(?!##).)+)##
(?:(?!##).)+
匹配任何字符,但不会匹配##
一次或多次。
演示
> var s = "this is the ##exa#mple## I am ##current## testing on"
> var re = /##((?:(?!##).)+)##/g;
undefined
> var m;
undefined
> while ((m = re.exec(s)) != null) {
... console.log(m[1]);
... }
exa#mple
current
对于你的第一个缺陷,你需要一个捕获组,它只捕获你的需求,如##([^#]*)## 对于你的第二个缺陷,你需要让你的正则表达式不贪婪,如##([^#]*?##现在打印组(1)
相关文章:
- 逃脱了单一角色的介绍人,而不是实际角色
- WebMethod在ASP.Net Web角色(Web窗体)中不起作用
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 显示使用jquery mobile扫描数据角色=页面上的条形码
- AngularJs基于角色的菜单显示安全问题
- 活动在magento中记录用户角色和权限
- 检查用户是否具有角色分析云代码
- 流星用户帐户和alanning流星角色-登录时检查角色
- 带有alanning的Flowrouter:角色-延迟在'userIsInRole'方法
- Javascript角色处理
- 与Django和Python相比,Node.js在JavaScript和Express之间的MEAN堆栈中扮演什么角色
- HapiJS中基于角色的身份验证
- 角色扮演游戏,如何滑动世界(场景)
- 如何在 JavaScript 中按箭头键来阻止移动角色时屏幕闪烁
- 在加载状态之前,我需要在angular js中为每个状态添加角色
- 如何摆脱角色移动时绘制的图像痕迹
- Angular JS授权-在加载页面之前检查用户角色
- 在D2L主题中按角色发布内容
- 在客户端应用程序中按角色筛选UI的策略
- 对象文字数据表中的 Google 可视化样式角色