Simulating REGEX look-behinds in JavaScript
It's no secret that JavaScript's implementation of regular expressions is pretty basic compared to, say, that of PHP. Even then, the lack of suport for look behind assertions (LBAs) is massively frustrtaing.
So I wrote my own workaround. Head over here to download, get usage info or view a demo.
My simulation defines three methods: match2 and replace2 (of the String object), and test2 (of the RegExp object). All work like their native counterparts, except they each accept an additional parameter - the LBA (as a string).
So to change all scary animals to scary monsters, you could do this:
1alert('scary lion; scary crocodile; cute puppy'.replace2(/[a-z]+/gi, 'monster', '(?<=scary )'));
2//== scary monster; scary monster; cute puppy
You see my current project involves writing a script which localises British into US English.
Some words change only when used as nouns. For example 'torch' becomes 'flashlight', but only when used as a noun. So it would change in the sentence "to shine a torch", but not in "to torch a building". 'Film' > 'movie' is another such example.
I realised the way to detect the role of a word within a sentence was (at least chiefly) to look at the word preceding it. For example if the word was preceded by the infinitive preposition 'to', or by a pronoun, it was most likely a verb.
Then I remembered you can't do LBAs in JavaScript, and I spent days pulling my hear out.
I hope it proves as useful to some of you as it has to me! Head over here to download, get usage info or view a demo.
Comments (0)