I want to use regex to find records that match certain pattern on Express.js using MongoDB.
Here is my code
var urlList = [];
var db = req.db;
var collection = db.get('project');
var regex = '/^'+url+'/';
console.log('regex = '+regex);
collection.find({url: { $regex: regex, $options: 'i' }},function(err,list){
console.log('length = '+list.length);
var arrayUrl = [];
for (var i=0;i<list.length;i++){
console.log(list[i].url);
arrayUrl.push(list[i].url);
}
});
But I got list.length = 0 although the database contains the records that match the pattern for sure.
Using the following command on cmd
db.project.find({url:{$regex:/^Projek-1/,$options: 'i'}});
I got the results I want.
How to use regex on express.js to find matched records in MongoDB database?
First, you don't really need to use $regex, you'll do fine with url: /foobar/i.
Anyway, the problem is that you are not creating a proper RegExp object, only a string that looks like one. Use a proper one by creating a new instance of RegExp
Example:
var re = new RegExp("^" + url);
...
find({url: re})
Related
My current regex is like so
/\.(jpe?g|png|gif|svg)$/i
I'm trying to modify it to support matching when the extension has get parameters at the end of it so all of the below formats would match
../fonts/fontawesome-webfont.svg
../fonts/fontawesome-webfont.svg?v=4.3.0
../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular'
How can I modify it to support these?
Assuming the URLs to be parsed follow proper formatting (where only one '?' delimiter can be used to signify the start of the query) you could do:
/\.(jpe?g|png|gif|svg)(?:\?.*|)$/i
var urls = [
'../fonts/fontawesome-webfont.svg',
'../fonts/fontawesome-webfont.svg?v=4.3.0',
'../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular'
];
var matches = urls.map(function(url) { return url.match(/\.(jpe?g|png|gif|svg)(?:\?.*|)$/i); });
document.write('<pre>' + JSON.stringify(matches, null, 2) + '</pre>');
Alternatively you could use Node's url.parse():
var url = require('url');
var urlObj = url.parse(URL_STRING);
var matches = urlObj.pathname.match(/\.(jpe?g|png|gif|svg)$/i);
I'm trying to replace the backslashes of the url/path to get the file name of the swf:
var path:String = "C:\Test\myswf.swf"
var swfURL:String = path.replace(/\\/gi, "/");
var swfFileName:String = path.slice(path.lastIndexOf("/")+1, path.length).replace(".swf", "");
But it doesn't works. The response is: 'C:Testmyswf.swf'. It's doesn't replace the string path. How can i do it?
I think you might need to escape the backslashes within your URL string:
var path:String = "C:\\Test\\myswf.swf"
Try this regex:
\\([^\\.]+)\.
Then get $1
I've managed to solve this problem by "performing crazy" with the code below:
var reg:RegExp = new RegExp("\\d"+stage.loaderInfo.url, "gi");
var idswf:String = reg.toString().replace(/\\/g, "/");
idswf = idswf.split("/")[idswf.split("/").length-2].replace(".swf", "");
It may not be the best solution, but it worked well for me and can work for other people...
I need to select links with a specific format of URLs. Can I use sizzle to evaluate a link's href attribute against a regular expression?
For example, can I do something like this:
var arrayOfLinks = Sizzle('a[HREF=[0-9]+$]');
to create an array of all links on the page whose URL ends in a number?
Give this a try. I've attempted to convert the jQuery regex selector that Kobi linked to into a Sizzle selector extension. Seems to work, but I haven't put it through a lot of testing.
Sizzle.selectors.filters.regex = function(elem, i, match){
var matchParams = match[3].split(',', 2);
var attr = matchParams[0];
var pattern = matchParams[1];
var regex = new RegExp(pattern.replace(/^\s+|\s+$/g,''), 'ig');
return regex.test(elem.getAttribute(attr));
};
In this case, your example would be written as:
var arrayOfLinks = Sizzle('a:regex(href,[0-9]+$)');
I have to use tinymce as a wysiwyg editor in a CMS to populate a flash app. I need to strip out the modern HTML in favor of something flash can use. Here's what I'm trying:
var initUnderline:RegExp = new RegExp('<span style="text-decoration: underline;">', "gi");
var endUnderline:RegExp = new RegExp("</span>", "gi");
var string:String = $.xmlData.content.landing.overview;//load the content from xml
var safeStr:String = string.replace(initUnderline, '<span style="text-decoration: underline;"><u>');
safeStr = string.replace(endUnderline, '</u></span>');
however, this only works for the endUnderline RegExp. The initial is not being replaced. Ideas?
I'm not great with regExps at all!
There's nothing wrong with your regexp stuff per se.
The bug is that you need to run the second replace on safeStr, not on string:
var safeStr:String = string.replace(initUnderline, '<u>');
safeStr = safeStr.replace(endUnderline, '</u>');
I'm working on WatiN automation tool. I'm having problem in regular expression. I've situation where i have to enter some text and click on a button in the popup window. I'm using AttachToIE method and URL attribute("http://192.168.25.10:215/admin/SelectUsers.aspx?Type=FeedbackID=ef5ad7ef5490-4656-9669-32464aeba7cd") of the popup to attach to the popup.
The problem is each time the popup appears the ID value in the URL changes. So i'm not able to access the popup. can anyone plz help with this by giving me Regular Expression for the changing value of ID in the below URL
("http://192.168.25.10:215/admin/SelectUsers.aspx?Type=FeedbackID=ef5ad7ef5490-4656-9669-32464aeba7cd")
thanking you
It appears that you have a URL with 2 query string parameters Type and ID and your pattern is:
"http://192.168.25.10:215/admin/SelectUsers.aspx?Type=Feedback&ID={some id}"
You can use the Find.ByUrl() attribute constraint method and pass it to AttachToIE() as shown below with the regex for matching that pattern.
string url = "http://192.168.25.10:215/admin/SelectUsers.aspx?Type=Feedback&ID="
Regex regex = new Regex(url + "[a-z0-9]+", RegexOptions.IgnoreCase);
IE ie = IE.AttachToIE(Find.ByUrl(regex));
string baseUrl ="http://192.168.25.10:215/admin/SelectUsers.aspx?Type=FeedbackID="
Regex urlIE= new Regex(baseUrl + "[\\wd]+", RegexOptions.IgnoreCase);
IE ie = IE.AttachToIE(Find.ByUrl(urlIE);
I'm not familiar with WatiN but it looks like it's runs on .Net so perhaps this might help?
var desiredId = "000000000000-0000-0000-000000000000";
var url = "http://192.168.25.10:215/admin/SelectUsers.aspx?Type=FeedbackID=ef5ad7ef5490-4656-9669-32464aeba7cd&someMoreStuff";
var pattern = #"(?i)(?<=FeedBackId=)[-a-z0-9]+";
var result = Regex.Replace(url, pattern, desiredId);
Console.WriteLine(result);
//Output: http://192.168.25.10:215/admin/SelectUsers.aspx?Type=FeedbackID=000000000000-0000-0000-000000000000&someMoreStuff
The following pattern should have the same affect but is more defensive. It should only match stuff in the query string, it requires the id to be 35 characters and won't match similar parameter names like "PreviousFeedBackId".
var pattern = #"(?i)(?<=\?.*\bFeedBackId=)[-a-z0-9]{35,35}\b";
If you just want to extract the id:
var id = Regex.Match(url, pattern).Value;
Console.WriteLine(id);
//output: ef5ad7ef5490-4656-9669-32464aeba7cd
WatiN has a feature where in we can use the url by neglecting the query string. Below is the code which is working fine for me.
string baseUrl = "http://192.168.25.10:215/admin/SelectUsers.aspx";
IE ie = IE.AttachToIE(Find.ByUrl(baseUrl,true));