我正在尝试确定textarea文本是否包含一些带有pattern的特殊变量:
##Contact.some_text_here##
txtareaval= 'Some text some text [variable field="##Contact.Address 3##" /]some[variable field="##Contact.Comments##" /][variable field="##Contact.ContactCompany##" /]Some text some text [variable field="##Contact.Email##" /]some[variable field="##Contact.Fax Number##" /]Some text some text [variable field="##Contact.First Name##" /]Some text some text [variable field="##Contact.Home Number##" /] Some text some text.';
我使用\W##[C][o][n][t][a][c][t][.]
之类的东西。虽然不行。
答案 0 :(得分:2)
我这样做了,希望它适合你:
var res = str.match(/"##Contact[.].+?"/g);
模式是这样的。首先,使用/ /
字符将正则表达式参数包围在匹配函数中。然后,为全局提供正则表达式选项(在本例中为 g
,否则正则表达式引擎仅在第一次匹配后返回)。
接下来,对于模式本身,我使用双引号作为查找表达式的一部分来包围我正在寻找的内容(作为目标字符串的一部分),以及##
联系人你有原始的正则表达式。如果需要,添加补充##
对。
类标记中的[.]
是按原样定位点,而不是将点解释为通配符(它在正则表达式中的特殊含义)。或者,您可以使用\.
(转义点)。
最后,.+?
表示至少匹配任何一个字符(直到本例中的下一个双引号),并且非贪婪(通过问号符号)。如果没有非贪婪标记,正则表达式引擎会识别字符,直到字符串中的最后一个双引号,迫使您必须再次分解字符串。
尝试使用jsFiddle中的变体来自己学习它。尝试删除?
符号,尝试删除最后的g
选项,尝试将+
替换为*
并查看会发生什么。对于由+
替换的*
,请添加仅包含Contact."
的字符串,并查看会发生的情况。
这是Fiddle。
答案 1 :(得分:1)
答案 2 :(得分:1)
你需要这个正则表达式:
str.match(/\W##Contact\./);
你的正则表达式是这样的:
str.match("\W##[C][o][n][t][a][c][t][.]")
哪个不起作用,因为String#match
需要一个必须在/ and /
或RegExp
对象之间的正则表达式。
除此之外,你还有不必要的角色类,如[C]
和[o]
等,也可以简化。
答案 3 :(得分:0)
如果您只是想测试它是否包含该模式,您可以使用此正则表达式:/##Contact\..+?##/
但我认为你想要用一些价值取代每一个。也许是这样的......
var pattern = /##Contact\.(.+?)##/g;
var txtareaval= 'Some text some text [variable field="##Contact.Address 3##" /]some[variable field="##Contact.Comments##" /][variable field="##Contact.ContactCompany##" /]Some text some text [variable field="##Contact.Email##" /]some[variable field="##Contact.Fax Number##" /]Some text some text [variable field="##Contact.First Name##" /]Some text some text [variable field="##Contact.Home Number##" /] Some text some text.';
var replacedValue = txtareaval.replace(pattern, function(match, capture){
if (capture === "Address 3") {
return "Some Address";
} else if (capture === "Comments") {
return "Some Comment";
} else if (capture === "ContactCompany") {
return "Some Company";
} else if (capture === "Email") {
return "somewhere@mail.com";
}
//... more conditions here...
return "";
});