如果列表中的某个字符位于字符之前,请选择一个字符

时间:2016-01-22 00:56:53

标签: javascript regex

我有这个正则表达式:

/([a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi

此正则表达式从我的文本中选择č -

sme! a Želiezovce 2015: Spoloíč-
ne pre Európu. Oslávili aj 940.

但我想只选择-(不含č)(如果列表[a-záäéěíýóôöúüůĺľŕřčšťžňď]中的某些字符位于-之前)。

2 个答案:

答案 0 :(得分:0)

在其他语言中,您可以使用lookbehind

/(?<=[a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi

仅当-$\s*前面有列表中的一个字符时,才匹配var match = /[a-záäéěíýóôöúüůĺľŕřčšťžňď](-$\s*)/gmi.match(string);

但是,Javascript没有lookbehind,因此解决方法是在其后面使用正则表达式部分的捕获组。

match[1]

当你使用它时,<a href="{{ pathFor i18n 'dictionary.update' }}">edit</a> 将包含以连字符开头的字符串部分。

答案 1 :(得分:0)

首先,在正则表达式中,您在括号中放置的所有内容都将在匹配过程中细分,以便匹配数组将在其0位置包含完整匹配的字符串,然后是所有正则表达式的括号从左到右。

/[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$\s*/gmi

会为您返回以下匹配字符串:["č-", "-"],以便您可以从匹配中提取所需的特定数据。

此外,$字符在正则表达式中表示行的结尾,并且您正在使用多行标记,因此从技术上讲,此部分\s*只是被忽略,因为在行之后没有任何内容出现在行中结束了。

正确的正则表达式应为/[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$/gmi