在Javascript中使用正则表达式来匹配特殊符号

时间:2011-01-21 02:23:36

标签: javascript regex

我正在为学校开发一个Web应用程序。他们有course_nameclass_name等字词。将课程视为课程的模板,这意味着课程必须继承课程的大部分属性。

现在,class_name必须包含course_name。例如:如果course_name是“CSS”,则class_name可以是“CSS 101”或“Beginning CSS”。使用正则表达式可以轻松检查这一点。我曾经使用过单词边界\ b \ b。

但是,我最近遇到了一个用户输入“HTML(初学者)”作为course_name的问题。在这种情况下,\ b作为单词边界将不再适用于在class_name中找到匹配项。有人可以帮我这个吗?我的大脑正在思考所有可能性。解决方案应涵盖大多数(如果不是全部)方案。

-Mark

3 个答案:

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