我希望有人可以检查我的正则表达式,以确保它正在执行我希望它执行的操作。
所以这就是我所追求的:
- 在单词边界内搜索单词 - 因此它可以是单独的单词,也可以是另一个单词中的单词
- 获取前面的 30 个字符(如果前面的字符存在),但前提是它们不包含我要搜索的词。
- 抓取接下来的 30 个字符(如果存在)
因此,如果我搜索“汽车”1,我有:
(\b\w*car\w*\b)
对于 2,我有:
((?!\b\w*car\w*\b).{30}|.{0,30})
对于 3,我有:
.{0,30}
一起:
((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b).{0,30}
我做对了吗,这会做我想要的吗?
最佳答案
需要对您的正则表达式进行细微更改。
最后一个.{0, 30}
需要放到一个组里。完整的正则表达式就变成了这样:
/((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b)(.{0,30})/
如果您在 javascript 控制台中运行它,您可以看到输出:
var str = "I'm an psychodelic purple and green electric smartcar that goes insanely really fast and can lap the Earth on a single charge"
var match = str.match(/((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b)(.{0,30})/);
alert(
"Word containing car: " + match[2] +
"\nFirst 30: " + match[1] +
"\nLast 30: " + match[3]
);
您应该收到以下警告消息:
Word containing car: smartcar
First 30: lic purple and green electric
Last 30: that goes insanely really fas
关于带有负后视的 Javascript 正则表达式(回顾),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34236403/