标准
任何以a开头并以b结尾的中间字符数字的单词。这个词不应该以char'#'
给定字符串:
a1b a2b a3b
#a4b a5b a6b
a7b a8b a9b
预期输出:
a1b
a2b
a3b
a7b
a8b
a9b
正则表达式:?我需要javascipt。
到目前为止尝试了以下内容:
var text_content =above_mention_content
var reg_exp = /^[^#]?a[0-9]b/gmi;
var matched_text = text_content.match(reg_exp);
console.log(matched_text);
Getting below output:
['a1b','a7b']
答案 0 :(得分:1)
您的/^[^#]?a[0-9]b/gmi
将匹配多次匹配行首的模式,然后匹配除#
以外的1或0个字符,然后a
,数字和b
。没有检查整个单词,也没有实际匹配比字符串开头更远的单词。
您可以使用匹配以#
开头的行匹配的正则表达式,并匹配并捕获在其他上下文中需要的字词:
var s = "a1b a2b a3b\n#a4b a5b a6b\n a7b a8b a9b";
var res = [];
s.replace(/^[^\S\r\n]*#.*|\b(a\db)\b/gm, function($0,$1) {
if ($1) res.push($1);
});
console.log(res);
模式详情:
^
- 行的开头(m
多行修饰符使^
与行首相匹配)[^\S\r\n]*
- 0+水平空格#.*
- 一个#
和任意0个字符,直到行尾|
- 或\b
- 领先的单词边界(a\db)
- 第1组捕获a
,数字,b
\b
- 一个尾随字边界。在replace()
方法中,使用回调,其中res
数组仅填充第1组的内容。
答案 1 :(得分:1)
我建议使用2 reg ex: First Reg预取非散列行:
^[^#][a\db\s]+
然后另一个用于获取单个单词的注册表(来自每一行):
^a\db\s