Соответствует строке с одним .
:
/^[^.]*\.[^.]*$/
То же самое для _
:
/^[^_]*_[^_]*/
Объединенное регулярное выражение должно выглядеть примерно так:
/^([^._]*\.[^._]*_[^._]*)|([^._]*_[^._]*\.[^._]*)$/
Теперь должно быть очевидно, что indexOf
- лучшее решение, более простое (производительность не имеет значения, пока не будет показано, что это узкое место).
Если интересно, обратите внимание, что объединенное регулярное выражение имеет два термина: «строка с одним .
перед одним _
» и наоборот. Было бы шесть для трех символов, и п! для п. Было бы проще запустить оба регулярных выражения и результат И, чем использовать объединенное регулярное выражение.
При использовании регулярных выражений всегда нужно искать более простое решение.