正则表达式中的特殊字符和字符串模式

时间:2014-02-04 07:28:20

标签: javascript regex

我正在尝试确定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][.]之类的东西。虽然不行。

Fiddle

4 个答案:

答案 0 :(得分:2)

我这样做了,希望它适合你:

var res = str.match(/"##Contact[.].+?"/g);

模式是这样的。首先,使用/ /字符将正则表达式参数包围在匹配函数中。然后,为全局提供正则表达式选项(在本例中为 g ,否则正则表达式引擎仅在第一次匹配后返回)。

接下来,对于模式本身,我使用双引号作为查找表达式的一部分来包围我正在寻找的内容(作为目标字符串的一部分),以及##联系人你有原始的正则表达式。如果需要,添加补充##对。

类标记中的[.]是按原样定位点,而不是将点解释为通配符(它在正则表达式中的特殊含义)。或者,您可以使用\.(转义点)。

最后,.+?表示至少匹配任何一个字符(直到本例中的下一个双引号),并且非贪婪(通过问号符号)。如果没有非贪婪标记,正则表达式引擎会识别字符,直到字符串中的最后一个双引号,迫使您必须再次分解字符串。

尝试使用jsFiddle中的变体来自己学习它。尝试删除?符号,尝试删除最后的g选项,尝试将+替换为*并查看会发生什么。对于由+替换的*,请添加仅包含Contact."的字符串,并查看会发生的情况。

这是Fiddle

答案 1 :(得分:1)

试试这个:

##Contact\.[A-Za-z0-9\ ]+##

匹配将是两个#字符,后跟“Contact”。然后是一个或多个字母,数字或空格字符,后跟两个#字符。

jsfiddle链接

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

在这里小提琴:JSFiddle http://jsfiddle.net/Utv84/1/