[英]Regular expression matching (Javascript)
我有以下字符串: |Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|
。
我正在尝试编写一个仅与包含“ Africa
”一词或任何其衍生词(包括|Mafricano|
和|Go Mafricano Go|
上述所有术语都是)的正则表达式匹配的词,每个词都包含在两个|
之间。
现在我想出了: /\\|[^\\|]*africa[^\\|]*\\|/gi
,它表示:
\\|
匹配|
[^\\|]*
零匹配到除|
之外的任何字符的无限制实例 africa
赛事africa
字面上 [^\\|]*
零匹配到除|
之外的任何字符的无限制实例 \\|
匹配|
我尝试插入((?:\\s)|(?!\\w))
使其/\\|[^\\|]*((?:\\s)|(?!\\w))africa[^\\|]*\\|/gi
。 尽管成功排除了|Mafricano|
和|Go Mafricano Go|
,也排除了除|West Africa|
以外的所有其他条目|West Africa|
和|Go Africa Go|
。 因此,这很好,但它也必须包括所有单词Africa
及其派生形式。
有谁能够帮助我?
您可以使用此正则表达式
[^|]*\bAfrica[a-z]*\b[^|]*
var str = "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|";
var arr = str.match(/[^|]*\bAfrica[a-z]*\b[^|]*/g);
console.log(arr); // ["Africa", "Africans", "African Society", "Go Africa Go", "West Africa"]
我想你想要这样的东西
\|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\|
> "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|".match(/\|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\|/gi);
[ '|Africa|',
'|Africans|',
'|African Society|',
'|Go Africa Go|',
'|West Africa|' ]
不要忘记打开i
修饰符以进行不区分大小写的匹配。
说明:
\| '|'
(?: group, but do not capture (0 or more
times):
(?! look ahead to see if there is not:
Mafrica 'Mafrica'
| OR
\| '|'
) end of look-ahead
. any character except \n
)*? end of grouping
africa 'africa'
(?: group, but do not capture (0 or more
times):
(?! look ahead to see if there is not:
Mafrica 'Mafrica'
| OR
\| '|'
) end of look-ahead
. any character except \n
)*? end of grouping
\| '|'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.