user7626553
user7626553

Reputation: 1

extract a string using regular expression in node

I'm trying to use exec for a regular expression in node. I know the expression works via testing it with an extension in VSCode but when I run the node app it keeps returning null.`

str = '\r\nProgram Boot Directory: \\SIMPL\\app01\r\nSource File:  C:\\DRI\\DRI\\DRI Conf Room v2 20180419aj\r\nProgram File: DRI Conf Room v2 20180419aj.smw\r\n';

var regex = /\Program File:(.*?)\\/;
var matched = regex.exec(str);
console.log(matched);

Upvotes: 0

Views: 3321

Answers (3)

The fourth bird
The fourth bird

Reputation: 163467

I think you don't have to escape the \P at the beginning and the string ends with \r\n so you could match that instead of \\ which will match a backslash.

If you don't want the leading whitespace in the first capturing group you could add \s*to match zero or more whitespace characters: /Program File:\s*(.*?)\r\n/

For example:

str = '\r\nProgram Boot Directory: \\SIMPL\\app01\r\nSource File:  C:\\DRI\\DRI\\DRI Conf Room v2 20180419aj\r\nProgram File: DRI Conf Room v2 20180419aj.smw\r\n';

var regex = /Program File:(.*?)\r\n/;
var matched = regex.exec(str);
console.log(matched[0]);
console.log(matched[1]);

Demo

Upvotes: 1

wp78de
wp78de

Reputation: 18980

The regex syntax you use looks off. Try it like this:

const regex = /^Program File:\s*(.*?)$/gm;
const str = `
Program Boot Directory: \\\\SIMPL\\\\app01
Source File:  C:\\\\DRI\\\\DRI\\\\DRI Conf Room v2 20180419aj
Program File: DRI Conf Room v2 20180419aj.smw
`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Upvotes: 0

user9947879
user9947879

Reputation:

You need to use a RegExp constructor:

var str = '\r\nProgram \r\nProgram File: DRI 0180419aj.smw\r\n'
    .replace('[\\r,\\n]',''); // removes the new lines before we search

var pattern = 'Program File.+' // write your raw pattern
var re = new RegExp(pattern); // feed that into the RegExp constructor with flags if needed

var result = re.exec(str); // run your search
console.log(result)

Not really sure what your pattern should do, so I just put one there, that matches whatever starts with Program File. If you want all matches, not just the first, just change it to

var re = new RegExp(pattern,'g');

Hope that helps!

Upvotes: 0

Related Questions