我正在为学校开发一个Web应用程序。他们有course_name
和class_name
等字词。将课程视为课程的模板,这意味着课程必须继承课程的大部分属性。
现在,class_name
必须包含course_name
。例如:如果course_name是“CSS”,则class_name可以是“CSS 101”或“Beginning CSS”。使用正则表达式可以轻松检查这一点。我曾经使用过单词边界\ b \ b。
但是,我最近遇到了一个用户输入“HTML(初学者)”作为course_name
的问题。在这种情况下,\ b作为单词边界将不再适用于在class_name
中找到匹配项。有人可以帮我这个吗?我的大脑正在思考所有可能性。解决方案应涵盖大多数(如果不是全部)方案。
-Mark
答案 0 :(得分:0)
var courses = "HTML (Beginner)".match(/\w+/g);//gives ["HTML", "Beginner"];
if (courses)//can be null if no word chars found
for (var i = 0; i < courses.length; i++)
//look for course[i] in your list of courses
答案 1 :(得分:0)
你可以使用'一个或多个空格'作为单词分隔符来提取单词然后进行比较吗?
var courses =“HTML(初学者)”。匹配(/ [^ \ s] + / g); //给出[“HTML”,“(初学者)”]
答案 2 :(得分:0)
首先,您需要能够正则表达式转义课程名称。我正在使用this question中的代码:
course_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
为了在course_name
中的第一个/最后一个字符可能不是单词字符时模拟边界,请使用以下内容:
RegExp("(?:^|\\W)" + str + "(?:$|\\W)")
一开始,我们检查字符串的开头或非单词字符,最后检查字符串的结尾或非单词字符。
把这些放在一起,我们有:
RegExp("(?:^|\\W)" + course_name.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?:$|\\W)")