我有一种情况,我有3个字体文件,我读了它的内容,以找到字体名称的mathes。但问题是字体名称是Wingdings,Wingdings 2,Wingdings 3.当我有Wingdings字体名称时它匹配所有3个文件,但我需要与字体名称完全相关的文件,而不是所有3个文件。我试图使用indexOf方法找到它,但它没有帮助。唯一合理的方法是使用正则表达式,但不能想到正确的表达式。需要提及的另一件事是我必须将参数传递给regExp,比如
var regExp = new RegExp('\\^' + fontName + '$\\', 'g');
if (currentFileContent.search(regExp) !== -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>'.");
}