来自在线工具和实际代码的javascript正则表达式行为的差异

时间:2016-08-03 16:30:54

标签: javascript regex node.js

我正在使用http://regexr.com/3duh0这个正则表达式

(?:\S+\s)?\S*Environment Canada\S? 

在这个字符串上

  

Flash Flood Watch于美国东部时间周五凌晨2点生效。雨量   警告生效至MDT下午8:40。资料来源:加拿大环境部

虽然当我将其应用到我的代码时,它在网上工作得非常精细和花花公子,但它的行为却截然不同,我无法做出正面或反面原因。

我正在使用节点0.10.32(我知道,但我对该版本没有选择),

var regexFindSource= new RegExp('(?:\S+\s)?\S*Environment Canada\S?');
var summary = 'Flash Flood Watch in effect until Friday, 2:00 AM EDT.  Rainfall Warning in effect until 8:40 PM MDT.  Source: Environment Canada'
source = summary.match(regexFindSource);
console.log(source);
//The results of this bit of code are
//What i want is 'Source: Environment Canada'
//What i get is 'Environment Canada'

我基于环境加拿大的正则表达式的原因是因为我想在环境加拿大的地方插入一个变量,就像这样

var source = wwArray.Source;   
var regexFindSource= new RegExp('(?:\S+\s)?\S*' + source + '\S?');

1 个答案:

答案 0 :(得分:0)

在\ S *之前添加'\',在

之后添加':'
var regexFindSource= new RegExp('(?:\S+\s)?\\S*: Environment Canada\S?');
var summary = 'Flash Flood Watch in effect until Friday, 2:00 AM EDT.  Rainfall Warning in effect until 8:40 PM MDT.  Source: Environment Canada'
source = summary.match(regexFindSource);
console.log(source);

为了您的编辑:

var source = wwArray.Source;   
var regexFindSource= new RegExp('(?:\S+\s)?\\S*: '+ source +'\S?');
var summary = 'Flash Flood Watch in effect until Friday, 2:00 AM EDT.  Rainfall Warning in effect until 8:40 PM MDT.  Source: Environment Canada'
source = summary.match(regexFindSource);
console.log(source);