Строка регулярных выражений заканчивается тем, что не работает в Javascript

Я не очень хорошо знаком с регулярным выражением. Я пытался проверить, заканчивается ли строка другой строкой. Приведенный ниже код возвращает значение null, когда я ожидал, что true. Что не так с кодом?

var id = "John";
var exists  ="blahJohn".match(/id$/);
alert(exists);

Ответ 1

Ну, с этим подходом вам нужно будет использовать конструктор RegExp, чтобы создать регулярное выражение, используя переменную id

var id = "John";
var exists = new RegExp(id+"$").test("blahJohn");
alert(exists);

Но есть много способов добиться этого, например, вы можете взять последние id.length символы строки и сравнить его с id:

var id = "John";
var exist = "blahJohn".slice(-id.length) == id; // true

Ответ 2

Для этого вам нужно использовать объект RegExp(), а не литерал:

var id = "John",
    reg = new RegExp(id+"$");

alert( reg.test("blahJon") );

То есть, если вы не знаете значение, которое вы тестируете раньше времени исполнения. В противном случае вы можете сделать:

alert( /John$/.test("blahJohn") );

Ответ 3

Более удобный способ сделать это - использовать RegExp.test:

(new RegExp(id + '$')).test('blahJohn'); // true
(new RegExp(id + '$')).test('blahJohnblah'); // false

Еще лучше было бы создать простую функцию, подобную этой:

function strEndsWith (haystack, needle) {
    return needle === haystack.substr(0 - needle.length);
}

strEndsWith('blahJohn', id); // true
strEndsWith('blahJohnblah', id); // false

Ответ 4

Попробуйте это -

var reg = "/" + id + "$/";
var exists  ="blahJohn".match(reg);

Ответ 5

var id = new RegExp("John");
var exists  ="blahJohn".match(id);
alert(exists);

попробуйте это

Ответ 6

Зачем использовать RegExp? Его дорого.

function EndsWith( givenStr, subst )
{
var ln = givenStr.length;
var idx = ln-subst.length;
return ( giventStr.subst(idx)==subst );
}

Гораздо проще и экономичнее, не так ли?

Ответ 7

Мне нравится @lonesomeday solution, но Im fan расширяет String.prototype в этих сценариях. Здесь моя адаптация его решения

String.prototype.endsWith = function (needle) {
     return needle === this.substr(0 - needle.length);
}

Итак, можно проверить с помощью

if(myStr.endsWith("test")) // Do awesome things here. 

Вкусный...

Ответ 8

Если вам нужна функция замены, рассмотрите этот regExp:

var eventStr = "Hello% World%";

eventStr = eventStr.replace(/[\%]$/, "").replace(/^[\%]/, ""); // replace eds with, and also start with %.

//output: eventStr = "Hello% World";

Ответ 9

var id = "John";

(new RegExp(`${id}$`)).test('blahJohn');  // true
(new RegExp(`${id}$`)).test('blahJohna'); // false

`$ {id} $` - это JavaScript Template strings, который будет скомпилирован в "John $".

$ после того, как John в RegExp обозначает конец строки, поэтому тестируемая строка не должна иметь ничего после значения id (например, John), чтобы пройти тест.

new RegExp (`$ {id} $`) - скомпилирует его в /John$/ (так что если id не должен быть динамическим, вы можете использовать just/John $/вместо нового RegExp (`$ {id} $`))

Ответ 10

Вот функция прототипа строки, которая использует регулярное выражение. Вы можете использовать его для проверки того, заканчивается ли какой-либо строковый объект с определенным строковым значением:

Функция прототипа:

String.prototype.endsWith = function (endString) {
    if(this && this.length) {
        result = new RegExp(endString + '$').test(this);
        return result;
    }
    return false;
} 

Пример использования

var s1 = "My String";
s1.endsWith("ring"); // returns true;
s1.endsWith("deez"); //returns false;