Строка регулярных выражений заканчивается тем, что не работает в 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;