javascript中以下要求的正则表达式是什么

时间:2016-11-07 21:01:24

标签: javascript regex node.js

标准
任何以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']

2 个答案:

答案 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