读取文件时的正则表达式javascript

时间:2015-09-30 18:44:35

标签: javascript regex

我有一种情况,我有3个字体文件,我读了它的内容,以找到字体名称的mathes。但问题是字体名称是Wingdings,Wingdings 2,Wingdings 3.当我有Wingdings字体名称时它匹配所有3个文件,但我需要与字体名称完全相关的文件,而不是所有3个文件。我试图使用indexOf方法找到它,但它没有帮助。唯一合理的方法是使用正则表达式,但不能想到正确的表达式。需要提及的另一件事是我必须将参数传递给regExp,比如

var regExp = new RegExp('\\^' + fontName + '$\\', 'g');
if (currentFileContent.search(regExp) !== -1) {...}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您似乎尝试在RegExp构造函数中使用正则表达式分隔符。您只需要文字表示法中的/.../

注意你不需要逃避字符串锚点的开始和结束,它们在正则表达式中失去了它们的特殊含义。 \\与单个\匹配,但在字符串结尾($)后无法匹配。

此外,您可以使用RegExp#test()函数检查字符串是否与模式匹配(注意不能使用g修饰符):

var regExp = RegExp('^' + fontName + '$'); 
if (regExp.test(currentFileContent)) { ... }

如果字体名称包含特殊字符,请使用escapeRegExp function from MDN

function escapeRegExp(string){
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}

然后

var regExp = RegExp('^' + escapeRegExp(fontName) + '$'); 

最后一点:如果字体名称出现在较大的字符串中,并且您需要匹配Windings而不是Windings3,请使用

var regExp = RegExp('\\b' + escapeRegExp(fontName) + '\\b'); 

\b是一个单词边界。

<强>更新

要确保只匹配后面没有空格(如果有)和数字的字体名称,请在声明(?!\\s*\\d)时使用RegExp前瞻:

var fontName = "Wingding";
var contents = "Font name: Wingding, the other file: Font name: Wingding 2. And so forth. ";
var rExp = RegExp(fontName + '(?!\\s*\\d)');
if (rExp.test(contents)) {
   document.write(fontName + " was found in '<i>" + contents + "</i>'.");
}