إزالة الحرف الأول والأخير: Python مقابل JavaScript
تقطيع Python مقابل slice/substring في JavaScript: إزالة الحرف الأول والأخير بأمان، بما في ذلك السلاسل النصية الفارغة وحالات Unicode الاستثنائية.
جدول المحتويات
أعيد إنشاؤه: ٢٧ مارس ٢٠٢٦ · آخر تحقق: ٣ نوفمبر ٢٠٢٦.
ملخص
Python: استخدم تقطيع النصوص text[1:-1] (الأبسط) أو text[1:len(text)-1] (الصريح). JavaScript: استخدم .slice(1, -1) (حديث وموصى به) أو .substring(1, length - 1) (طريقة API قديمة، لا تدعم الفهارس السالبة). كلاهما يتعامل مع النصوص الفارغة أو التي تحتوي على حرف واحد بشكل متماثل — حيث يعيدان نصاً فارغاً بأمان.
تعد عملية إزالة الحرف الأول والأخير عملية شائعة في معالجة النصوص عند تحليل البيانات (مثل إزالة علامات الاقتباس أو الأقواس)، وتقليم البيانات (إزالة المحددات)، ومعالجة النصوص بشكل عام. ورغم بساطتها، إلا أن الصيغة تختلف بين اللغات، كما أن التعامل مع الحالات الاستثنائية أمر بالغ الأهمية. يغطي هذا المرجع جميع الطرق مع أمثلة عملية.
طرق Python
الطريقة ١: التقطيع [1:-1] (موصى بها)
text = "Hello"
result = text[1:-1]
print(result) # "ell"
# More examples:
text = "Programming"
result = text[1:-1]
print(result) # "rogrammin"
# Remove quotes
text = '"Hello, World!"'
result = text[1:-1]
print(result) # 'Hello, World!'
# Remove brackets
text = "[1, 2, 3]"
result = text[1:-1]
print(result) # "1, 2, 3"
لماذا تعمل [1:-1]:
[1:]= من الفهرس ١ حتى النهاية[:-1]= من البداية حتى الفهرس -1 (الحرف الأخير، مستثنى)[1:-1]= من الفهرس ١ حتى الفهرس -1 (غير شامل)، مما يزيل الأول والأخير
المميزات:
- متوافقة مع أسلوب Python (idiomatic)
- موجزة
- سريعة (عملية أصلية في اللغة)
العيوب:
- أقل صراحة (قد تسبب ارتباكاً للمبتدئين)
الطريقة ٢: التقطيع [1:len(text)-1] (الصريحة)
text = "Hello"
result = text[1:len(text)-1]
print(result) # "ell"
# Equivalent to [1:-1], but more verbose
المميزات:
- توضح صراحة "من ١ إلى الطول - ١"
- أسهل في الفهم للمبتدئين
العيوب:
- تتطلب كتابة أكثر
- أبطأ (بشكل طفيف — بسبب استدعاء len())
- ليست الطريقة الشائعة في Python
الحالات الاستثنائية: Python
النص الفارغ
text = ""
result = text[1:-1]
print(result) # "" (returns empty string, doesn't error)
حرف واحد
text = "A"
result = text[1:-1]
print(result) # "" (removes the only character)
حرفان
text = "AB"
result = text[1:-1]
print(result) # "" (removes both)
ثلاثة أحرف (الحد الأدنى لنتيجة غير فارغة)
text = "ABC"
result = text[1:-1]
print(result) # "B" (keeps middle character)
سلوك آمن ومتوقع: تقطيع النصوص في Python لا يسبب أخطاء أبداً عند استخدام فهارس خارج النطاق، بل يعيد ما هو متاح فقط.
طرق JavaScript
الطريقة ١: slice(١, -1) (حديثة، وموصى بها)
const text = "Hello";
const result = text.slice(1, -1);
console.log(result); // "ell"
// More examples:
console.log("Programming".slice(1, -1)); // "rogrammin"
console.log('"Hello, World!"'.slice(1, -1)); // "Hello, World!"
console.log("[1, 2, 3]".slice(1, -1)); // "1, 2, 3"
لماذا تعمل .slice(1, -1):
- المعامل الأول: فهرس البداية (١)
- المعامل الثاني: فهرس النهاية (غير شامل، -1 = الحرف الأخير)
- الفهارس السالبة يتم حسابها من النهاية
المميزات:
- تعمل في جميع المتصفحات الحديثة
- آمنة في الحالات الاستثنائية
- سهلة القراءة
العيوب:
- لا توجد عيوب تذكر
الطريقة ٢: substring(١, length - ١) (بديل قديم)
const text = "Hello";
const result = text.substring(1, text.length - 1);
console.log(result); // "ell"
الاختلافات عن .slice():
substring()لا تتعامل مع الفهارس السالبة- يجب استخدام
.length - 1بشكل صريح - طريقة API أقدم قليلاً
متى تستخدمها: استخدم .slice() بدلاً منها؛ فهي أبسط ومدعومة على نطاق أوسع.
الطريقة ٣: substring() مع تبديل المعاملات (مخادعة)
const text = "Hello";
// substring() auto-swaps if start > end, making this work:
const result = text.substring(text.length - 1, 1);
console.log(result); // "ell" (but not recommended, confusing)
غير موصى بها — تعتمد على السلوك الغريب لـ substring().
الحالات الاستثنائية: JavaScript
النص الفارغ
const text = "";
console.log(text.slice(1, -1)); // "" (safe)
حرف واحد
const text = "A";
console.log(text.slice(1, -1)); // "" (removes it)
حرفان
const text = "AB";
console.log(text.slice(1, -1)); // "" (removes both)
ثلاثة أحرف
const text = "ABC";
console.log(text.slice(1, -1)); // "B" (keeps middle)
مقارنة جنباً إلى جنب
| المهمة | Python | JavaScript |
|---|---|---|
| أساسي | text[1:-1] | text.slice(1, -1) |
| مفصل | text[1:len(text)-1] | text.substring(1, text.length - 1) |
| سلسلة فارغة | تعيد "" | تعيد "" |
| حرف واحد | تعيد "" | تعيد "" |
| سلوك آمن | نعم | نعم |
حالات استخدام عملية
حالة الاستخدام ١: إزالة علامات الاقتباس من السلاسل الشبيهة بـ JSON
# Python
json_string = '{"name": "Alice", "age": 30}'
# Remove outer quotes from a value
value = '"Alice"'
clean = value[1:-1]
print(clean) # Alice
// JavaScript
const jsonString = '{"name": "Alice", "age": 30}';
const value = '"Alice"';
const clean = value.slice(1, -1);
console.log(clean); // Alice
حالة الاستخدام ٢: إزالة تدوين الأقواس
# Python
bracketed = "[192.168.1.1]"
ip = bracketed[1:-1]
print(ip) # 192.168.1.1
# Remove angle brackets
tagged = "<html>"
content = tagged[1:-1]
print(content) # html
// JavaScript
const bracketed = "[192.168.1.1]";
const ip = bracketed.slice(1, -1);
console.log(ip); // 192.168.1.1
const tagged = "<html>";
const content = tagged.slice(1, -1);
console.log(content); // html
حالة الاستخدام ٣: تخطي السطور الأولى والأخيرة (متعدد السطور)
# Python
code = """def hello():
print('Hi')
return True"""
lines = code.split('\n')
# Keep middle lines only
middle_lines = lines[1:-1]
print('\n'.join(middle_lines)) # " print('Hi')"
// JavaScript
const code = `def hello():
print('Hi')
return True`;
const lines = code.split('\n');
const middleLines = lines.slice(1, -1);
console.log(middleLines.join('\n')); // " print('Hi')"
حالة الاستخدام ٤: إزالة المحددات (المفصولة بـ Pipe)
# Python
pipe_delimited = "|item1|item2|item3|"
items = pipe_delimited[1:-1].split('|')
print(items) # ['item1', 'item2', 'item3']
// JavaScript
const pipeDelimited = "|item1|item2|item3|";
const items = pipeDelimited.slice(1, -1).split('|');
console.log(items); // ['item1', 'item2', 'item3']
متقدم: إزالة عدة أحرف من كل طرف
Python: إزالة أول N وآخر M من الأحرف
def remove_ends(text: str, start: int = 1, end: int = 1) -> str:
"""Remove start characters from beginning, end from end"""
return text[start:-end] if end > 0 else text[start:]
print(remove_ends("Hello, World!", 1, 1)) # "ello, World"
print(remove_ends("Hello, World!", 2, 2)) # "llo, Worl"
print(remove_ends("Hello, World!", 1, 0)) # "ello, World!"
JavaScript: إزالة أول N وآخر M من الأحرف
function removeEnds(text, start = 1, end = 1) {
if (end === 0) {
return text.slice(start);
}
return text.slice(start, -end);
}
console.log(removeEnds("Hello, World!", 1, 1)); // "ello, World"
console.log(removeEnds("Hello, World!", 2, 2)); // "llo, Worl"
console.log(removeEnds("Hello, World!", 1, 0)); // "ello, World!"
أساليب آمنة من حيث النوع (TypeScript)
function removeEnds(text: string, start: number = 1, end: number = 1): string {
if (text.length < start + end) {
return "";
}
return text.slice(start, text.length - end);
}
const result: string = removeEnds("Hello");
console.log(result); // "ell"
مقارنة الأداء
يتم تنفيذ كل من تقطيع Python و JavaScript .slice() بلغة C/C++، لذا فإن الأداء متطابق للأغراض العملية:
# Python timing — run this yourself to get numbers for your machine
import timeit
text = "Hello, World!"
print(timeit.timeit(lambda: text[1:-1], number=1_000_000))
# Slicing is implemented in C; on modern hardware this completes
# in well under a second for a million iterations on a short string.
// JavaScript timing (1 million iterations)
const text = "Hello, World!";
console.time("slice");
for (let i = 0; i < 1_000_000; i++) {
text.slice(1, -1);
}
console.timeEnd("slice");
// Performance is extremely fast in modern engines
الحكم النهائي: استخدم الطريقة الاصطلاحية للغتك. كلاهما سريع بما يكفي لأي حالة استخدام في العالم الحقيقي.
الأخطاء الشائعة
Python: نسيان سلوك الفهرس السالب
text = "Hello"
# WRONG: Using -1 as end, forgetting it means "up to last char"
result = text[1:-1] # "ell" (correct by accident)
# WRONG: Thinking -1 = "one character from end"
result = text[:-1] # "Hell" (removes last char, not what you intended)
JavaScript: عدم فهم الوسيط الثاني لـ .slice()
const text = "Hello";
// WRONG: Thinking 4 means "4 characters from end"
const result = text.slice(1, 4); // "ell" (happens to work here)
// WRONG: Using positive index for end when wanting last char
const result2 = text.slice(1, text.length); // "ello" (keeps last char)
// RIGHT: Use negative index
const result3 = text.slice(1, -1); // "ell"
البدائل ومتى تستخدمها
عندما تحتاج إلى إزالة مشروطة
# Only remove if string long enough
text = "Hi"
result = text[1:-1] if len(text) > 2 else text
print(result) # "Hi"
text = "Hello"
result = text[1:-1] if len(text) > 2 else text
print(result) # "ell"
const text = "Hi";
const result = text.length > 2 ? text.slice(1, -1) : text;
console.log(result); // "Hi"
عندما تحتاج إلى سلوك مختلف في الحالات الحدية
def safe_remove_ends(text: str) -> str:
"""Remove first/last only if safe"""
if len(text) <= 2:
return "" # Or return text, depends on use case
return text[1:-1]
print(safe_remove_ends("A")) # ""
print(safe_remove_ends("AB")) # ""
print(safe_remove_ends("ABC")) # "B"
الخلاصة
يعتبر كل من [1:-1] في Python و .slice(1, -1) في JavaScript أساليب اصطلاحية وآمنة وسريعة. فهي تتعامل مع الحالات الحدية بسلاسة (تعيد سلاسل فارغة بدلاً من إظهار خطأ). استخدمها بثقة. الفائدة الرئيسية: الفهارس السالبة في كلتا اللغتين قوية وبديهية بمجرد أن تستوعب أن -1 تعني "العنصر الأخير".
قراءات ذات صلة
للوكلاء الآليين:get_post/posts/index.json/ar/remove-first-and-last-character-from-string-python-vs-javascript.md
نشرة مجانية
ابقَ على مسار النيرد
رسالة واحدة كلّ أسبوع: عدد الخميس يضمّ شرحًا لمنظومة واحدة، وثلاث وظائف عن بُعد، وتمرينًا واحدًا، وخلاصة بالعربية.