优雅的Regex在控制结构中的应用
Elegant Regex Use in Control Structure
我正在寻找一种在控制结构中使用正则表达式的更优雅的方法。我希望能够使用匹配执行操作,而无需在需要的地方之外声明regex,也无需执行两次匹配操作。
以下是我为简洁起见编辑的代码:
/* I'm not a fan of declaring this outside of where it will be used */
var regexYoutube = new RegExp(/((youtube'.com'/watch'?v=)|(youtu'.be'/))(.{11})/i);
if(isImage(content)){
data.type = 'IMAGE';
data.content = toImage(content);
postContent(data);
} else if (isVideo(content)){
data.type = 'VIDEO';
data.content = getVideoThumb(content);
postContent(data);
} else {
data.type = 'STRING';
data.content = content;
postContent(data);
}
function isImage(content){
if(content.indexOf(".jpg") > -1)
return true;
else
return false;
}
function isVideo(content){
return regexYoutube.test(content);
}
function getVideoThumb(content){
/* I don't want to perform a test followed by an exec */
var youtubeMatch = regexYoutube.exec(content);
return "http://img.youtube.com/vi/"+youtubeMatch[4]+"/0.jpg";
}
我不在,这是非常挑剔的,但如果这是一种必要的邪恶,我会接受的。
我会将isVideo
函数修改为其他函数,例如execYouTubeRegex
,并返回.exec的值。然后,不要在execYouTubeRegex
外部声明regex,而是在函数内部声明它。
然后,您可以将isYoutube
替换为对execYouTubeRegex
的调用并检查它是否返回了任何内容,并将在其他地方使用的exec调用替换为使用相同的函数。
这本身就是一种邪恶,因为它将函数的副作用用于其他事情(简单的返回值是check(。但是,它是在不使用正则表达式的地方定义正则表达式的替代方案。
正如一篇评论中提到的,这并不是真正的邪恶。保持你的范围小,它不会变得太混乱-代码对我来说很可读。
相关文章:
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- Redux应用程序结构-在哪里放置服务/业务逻辑
- 使用angularjs和node.js时的Web应用程序文件夹结构
- JQuery代码语法问题?(“不允许内联控制结构”)
- 应用程序在“关闭”之后停止工作(控制台中没有错误);咕哝的构造”;
- TypeScript 1.8,多个.ts文件中的单个文件-应用程序结构
- 骨干.js如何跟踪登录用户状态和有关应用程序结构的一般建议
- 用于第三方 API 调用的 Web 应用体系结构
- 我的开关结构似乎有效(JavaScript 控制结构)
- Javascript - Web 应用程序结构
- Node.js & Express - 应用程序结构的全局模块和最佳实践
- 控制结构php和控制结构javascript之间的差异
- Git:如何在目录结构方面分离后端Rest Api和前端应用程序的版本控制
- Laravel+AngularJS应用程序结构
- 流星新的应用程序结构减慢了ui文件夹的开发速度
- Javascript面向对象的应用程序结构
- 优雅的Regex在控制结构中的应用
- 正确的javascript应用程序结构
- Javascript-获取定义函数的函数或控制结构
- 使用Spine.js的真实Web应用程序结构