Home > front end >  Regex filter excludes ":" and includes at least one word character
Regex filter excludes ":" and includes at least one word character

Time:12-02

The task is to exclude value if one contains :. The value also must include at least 1 word character.

matched string values are:

'   h-73 \r\n\t'
'   hey'
'hi  '
'7'

not matched values are:

'    \r\n\t' // neither letter not digit
'    ' // neither letter not digit
'  sds:  \r\n\t' // :

To exclude : I'd use /^[^:] $/ to filter word characters I'd use /\w /.

I have no idea how to use them together in the same regex because scope of each condition should be whole string.

CodePudding user response:

The regex that matches your specifications is

/^[^\w:]*\w[^:]*$/

Details:

  • ^ - start of string
  • [^\w:]* - zero or more chars other than word and : chars
  • \w - one word char
  • [^:]* - any chars, zero or more occurrences, other than a colon
  • $ - end of string.

JavaScript demo:

const texts = ['   h-73 \r\n\t','   hey','hi  ','7','    \r\n\t','    ','  sds:  \r\n\t'];
const re  = /^[^\w:]*\w[^:]*$/;
for (const text of texts) {
    console.log("'" text "'", '=>', re.test(text));
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

NOTE: You could also use /^[^:]*\w[^:]*$/, but this regex grabs non-colons from the start of string as many times as possible, and then backtracks to find a word char, which is less efficient. So, the \w in the first negated character class is welcome.

  • Related