Conditional Renderings with JavaScript Regex

前端 未结 2 1941
自闭症患者
自闭症患者 2021-01-15 10:03

I need to match on a string such as this:

\'if Country equals \"United States\" then Show\'

I\'m working with the Webforms for Marketers Module

2条回答
  •  悲哀的现实
    2021-01-15 10:32

    I'd suggest an expression like this:

    /^if\s+([\w\s]+)\s+equals\s+"([\w\s]*)"\s+then\s+(\w*)$/
    

    Which you could use like this:

    var expression = // set this to your input
    var matches = expression.match(/^if\s+([\w\s]+)\s+equals\s+"([\w\s]*)"\s+then\s+(\w*)$/);
    
    if (matches) { // if matches isn't null
        // matches[1] is the field name
        // matches[2] is the value in quotes
        // matches[3] is the operation to perform
    

    I haven't hardcoded "Hide" and "Show" into the regex - instead it returns whatever string is after "then". I figured that would make it easier to add more operations later. If you want to hardcode these operation names just change the final (\w*) to (Hide|Show). Also this expression will work if the part in quotes is an empty string, which may be valid for some field values.

    Demo: http://jsfiddle.net/2UFHN/1/

    Note: You said _"any number of digits, and/or letters and/or white-spaces" - for that you just need [\w\s]+. In your expressions you had (\d*|\w*)\s+, which means "zero or more digits OR zero or more word characters FOLLOWED BY by one or more spaces". \w already matches digits (as well as a-z and underscore), so you don't need \d as well.

    You might want to add an i flag to your expression, as in /expressionhere/i to make it case insensitve.

提交回复
热议问题