这可能是一个非常容易回答的问题,但我还没有弄清楚正确的方法是什么。
我需要通过正则表达式匹配文本,使用^ and $
仅匹配以该字符串开头和结尾的元素。但是,我需要能够使用变量来做到这一点:
var name // some variable
var re = new RegExp(name,"g");
所以我想匹配完全(从头到尾)包含我的变量的每个字符串name
,但我不想匹配在某个地方包含我的变量的字符串name
。
我该怎么做?
谢谢
这可能是一个非常容易回答的问题,但我还没有弄清楚正确的方法是什么。
我需要通过正则表达式匹配文本,使用^ and $
仅匹配以该字符串开头和结尾的元素。但是,我需要能够使用变量来做到这一点:
var name // some variable
var re = new RegExp(name,"g");
所以我想匹配完全(从头到尾)包含我的变量的每个字符串name
,但我不想匹配在某个地方包含我的变量的字符串name
。
我该怎么做?
谢谢
var strtomatch = "something";
var name = '^something$';
var re = new RegExp(name,"gi");
document.write(strtomatch.match(re));
i
用于忽略大小写。这仅匹配单词“something”,不会匹配其他东西。
如果您想在句子中间匹配它,您应该在代码中使用以下内容
var name = ' something ';
或者,使用单词边界,
var name = '\\bsomething\\b';
如果您说要匹配字符串something
的开头或结尾,请执行以下操作:
/^something|something$/
使用您的变量:
new RegExp("^" + name + "|" + name + "$");
编辑:对于您更新的问题,您希望name
变量是匹配的整个字符串,因此:
new RegExp("^" + name + "$"); // note: the "g" flag from your question
// is not needed if matching the whole string
但这毫无意义,除非name
它本身包含正则表达式,因为尽管您可以说:
var strToTest = "something",
name = "something",
re = new RegExp("^" + name + "$");
if (re.test(strToTest)) {
// do something
}
你也可以说:
if (strToTest === name) {
// do something
}
编辑2:好的,从您的评论来看,您似乎是在说正则表达式应该匹配“某事”作为离散词出现在您的测试字符串中的任何位置,所以:
"something else" // should match
"somethingelse" // should not match
"This is something else" // should match
"This is notsomethingelse" // should not match
"This is something" // should match
"This is something." // should match?
如果这是正确的,那么:
re = new RegExp("\\b" + name + "\\b");
你应该使用/\bsomething\b/
. \b
是匹配单词边界。
"A sentence using something".match(/\bsomething\b/g);