Дидан аз назари мусбат ва манфӣ дар регуляриҳои JavaScript
Гоҳо ба ҳалли намуди чунин масъала ниёз дорад: сатр
'aaa'-ро ёфта
ба '!' иваз намоед,
аммо танҳо дар сурате, ки баъд аз 'aaa'
'x' истода бошад, ва худи 'x'-ро
дар ин ҳолат иваз накунем. Агар мо кӯшиш кунем, ки масъаларо
'ба таври рост' ҳал кунем, ҳеҷ коре намешавад:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa'-ро бармегардонад, вале мо '!x baaa' мехостем
Дидан ба пеш
Барои ҳалли масъала роҳе лозим аст, ки бигӯяд,
ки 'x'-ро набояд иваз кард. Ин кор
бо истифодаи қафсҳои махсус (?= )
анҷом дода мешавад,
ки танҳо менигаранд, вале бо худ намебаранд.
Ин қафсҳо дидани мусбат ба пеш номида мешаванд.
Мусбат - зеро ки 'x'
(дар ҳолати мо) бояд мавҷуд бошад - фақат он вақт иваз кардан
рӯй медиҳад.
Биёед ин қафсҳоро барои ҳалли масъалаи мо истифода барем:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab'-ро бармегардонад
Дидани манфӣ ба пеш низ мавҷуд аст
- (?! ) - он, баръакс, мегӯяд, ки
чизи муайян набояд мавҷуд бошад. Дар мисоли оянда,
иваз кардан фақат он вақт рӯй медиҳад, ки баъд аз 'aaa'
'x' НАистода бошад:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b'-ро бармегардонад
Дидан ба қафо
Ба ҳамин монанд дидани мусбат ба қафо мавҷуд аст
- (?<= ). Дар мисоли оянда
иваз кардан фақат он вақт рӯй медиҳад, ки пеш аз
'aaa' 'x' истода бошад:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!'-ро бармегардонад
Дидани манфӣ ба қафо низ мавҷуд аст
- (?. Дар мисоли оянда иваз кардан
фақат он вақт рӯй медиҳад, ки пеш аз 'aaa'
'x' истода набошад:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!'-ро бармегардонад
Масъалаҳои амалӣ
Сатр дода шудааст, ки номҳои функсияҳоро дар бар мегирад:
let str = 'func1() func2() func3()';
Аз сатр массиви номҳои функсияҳоро ба даст оред.
Сатр бо тег дода шудааст:
let str = '<a href="" class="eee" id="zzz">';
Аз ин тег массиви номҳои сифатҳоро ба даст оред.
Сатр бо тағирёбандаҳо дода шудааст:
let str = '$aaa $bbb $ccc xxxx';
Зерсатрҳоеро ба даст оред, ки пеш аз онҳо аломати доллар истода бошад.